Laden...
I
Illuvatar myCSharp.de - Member
noch keiner Deutschland;) Dabei seit 29.06.2004 21 Beiträge
Benutzerbeschreibung

Forenbeiträge von Illuvatar Ingesamt 21 Beiträge

01.10.2008 - 18:34 Uhr

Gibst du denn den Speicher auch mittels "Marshal.FreeCoTaskMem(data);" wieder frei?

Eigentlich ja, ich hatte nur den Befehl mittlerweile mal rausgenommen - ich dachte, eigentlich brauch ich diese Daten ja noch. Aber macht keinen Unterschied.

01.10.2008 - 12:20 Uhr

Hi,

ich versuche in einem Programm von mir einen mitgelieferten Truetype-Font zu laden und verwenden. Ich habe per Google Code dafür gefunden und für mich angepasst. Bei 80% der Nutzer (inklusive mir) funktioniert es auch, aber die anderen 20% berichten eben von Fehlern. Ich habe leider zu wenig Information um irgendeine Verbindung zwischen allen, bei denen es nicht funktioniert zu finden. Nach eigenen Angaben verwenden alle das aktuelle .net-Framework.

Der Code, den ich verwende ist:


            PrivateFontCollection pfc = new PrivateFontCollection();
            // Die TTF-DAtei "RINGM___.TTF" ist dem Projekt als resource hinzugefügt
            byte[] fontdata = LotroSignatures.Properties.Resources.RINGM___;
            IntPtr data = Marshal.AllocCoTaskMem(fontdata.Length);
            Marshal.Copy(fontdata, 0, data, fontdata.Length);
            pfc.AddMemoryFont(data, fontdata.Length);

            ringbearer = (FontFamily)pfc.Families.GetValue(0);
            font12 = new Font(ringbearer, 12);
            font16 = new Font(ringbearer, 16);
            font18 = new Font(ringbearer, 18);

Der Fehler, den manche erhalten:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Drawing.SafeNativeMethods.Gdip.GdipDrawStri ng(HandleRef graphics, String textString, Int32 length, HandleRef font, GPRECTF& layoutRect, HandleRef stringFormat, HandleRef brush)
at System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)
at System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, Single x, Single y)
at LotroSignatures.MainForm.DrawStringWithOutline(Gra phics g, String str, Font font, Brush outline, Brush foreground, Int32 x, Int32 y)
at LotroSignatures.MainForm.CreateImage()
...

Das passiert dann an einer Stelle, wo ich die oben in Membervariablen gespeicherten Fonts verwende:

g.DrawString(str, font, outline, i, j);
06.02.2007 - 15:55 Uhr

Ja, danke 😉, es hat dann funktioniert - ist halt alles auf Englisch, aber das stört mich nicht.

06.02.2007 - 13:10 Uhr

Hi Community,

ich versuche zur Zeit, mein Visual C# 2005 Express Edition unter Vista zum Laufen zu kriegen. Das Problem dabei ist, dass sich der "Upgradepatch" für Vista nicht installieren lässt. Die Fehlermeldung ist im Anhang zu sehen - allerdings bin ich überzeugt, die richtige Version installiert zu haben. Ich habe mir das VS ganz normal runtergeladen, dann alles bis auf den SQL Server installiert, dann über Windows Update das SP1 installiert und dann eben versucht, das "Visual Studio 2005 Service Pack 1 Update for Windows Vista Beta" zu installieren, wobei dann die Fehlermeldung erschienen ist. Ich hab auch schon versucht, das SP1 zu deinstallieren, und das auch extra von microsoft.com runterzuladen, aber das ist das Gleiche.
Ich meine gelesen zu haben, dass hier schon welche Visual Studio Express unter Vista verwenden - wie habt ihr das gemacht?

Danke

Edit: Ach so ist das doch immer - kaum postet man, findet man etwas Neues. Das ganze scheint evtl. mit der Sprache zusammenzuhängen - und ich hab tatsächlich Visual Studio auf Deutsch, und den Patch gibts nur auf Englisch... ich probier mal, VS auf Englisch zu installieren.
Edit2: Titel geändert

25.04.2006 - 11:56 Uhr

Hmm also erstmal, danke für die Antwort 😉

Vielleicht mach ich das ja ganz falsch... was ich im Endeffekt haben will, ist ein Fenster in einer bestimmten Form, d.h. bisher habe ich eben FormBorderStyle auf None, den TransparencyKey gleich wie die Hintergundfarbe, und dann im OnPaint selbst gemalt. Allerdings stört es, wenn dann dieses Menu fehlt, v.a. weil andere Anwendungen das ja auch schaffen, ich hab hier grade zB das StartSmart von Nero, und (soll nicht trollig klingen) in Java, ein Fenster mit setUndecorated(true), hat auch dieses Menu... X(

24.04.2006 - 22:35 Uhr

*Push*

Hat keiner eine Idee?

22.04.2006 - 17:12 Uhr

Original von FZelle
Es ist nicht nur der Typsicherheit wegen.

Mach mal ein paar Geschwindigkeits test, wirst Dich wundern.

Das wundert mich ein wenig und bringt mich auf die Frage: Wie funktionieren die Generics in C# denn intern?
In Java ist es so, dass Generics im Bytecode nicht mehr existieren. Der Compiler überprüft das also, aber später wird dann doch wieder gecastet. Der Vorteil davon ist, so heißt es immer, dass nicht immer neue Klassen erstellt werden (wie bei C++ templates) und das Programm dadurch klein gehalten wird. Der Nachteil ist eben, dass die Geschwindigkeit nicht steigt (wenn auch nicht sinkt) (und so Sachen wie dass es keine Generic Arrays gibt).

Lange Rede, kurzer Sinn: In C# muss das ja anders sein. Hätte jemand einen Link parat, in dem das beschrieben wird? (Oder erklärt es mir vielleicht sogar jemand von euch 🙂 )

22.04.2006 - 16:44 Uhr

Ich hab bei einem Form das FormBorderStyle Property auf None gesetzt. Das hat als Nebenfolge, dass ich in der Windows-Taskleiste bei dem Fenster kein Kontextmenü mehr hab. (Da wo normal Wiederherstellen, Verschieben, Größe ändern, Minimieren, Maximieren, (Separator,) Schließen drin ist).
Gibt es eine Möglichkeit, dieses Kontextmenu nicht zu entfernen?

14.12.2005 - 21:35 Uhr

Hat hier niemand eine Idee? push

Btw ich hab das jetzt gecrosspostet, aber ich werde hier schreiben, falls ich woanders die Lösung finde:
http://java-forum.org/de/viewtopic.php?p=153161#153161

11.12.2005 - 21:35 Uhr

Hat jemand von euch schon mal IKVM ausprobiert?

Ich würde gerne aus einer Java-Applikation C#-Klassen verwenden. Zum Testen habe ich eine ganz kleine Klasse erstellt, die nichts weiter kann, als einen string[] mit den Namen aller aktiven Toplevel-Fenster zu erzeugen (über winapi).

Daraus habe ich eine .dll erstellt und in den Einstellungen angegeben, einen strong name zu erstellen, was auch prima funktioniert hat. Der Versuch, mit dieser dll als Parameter ikvmstub aufzurufen scheiterte aber:

D:\IKVM\test1\GetWindows\bin\Release>........\ikvmbin-0.22.0.0\ikvm-0.22.0.0\bin\ikvmstub.exe GetWindows.dll

Unhandled Exception: System.BadImageFormatException: The format of the file 'GetWindows.dll' is invalid.
File name: "GetWindows.dll"
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Boolean isStringized, Evidence assemblySecurity, Boolean throwOnFileNotFound, Assembly locationHint, StackCrawlMark& stackMark)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Boolean stringized, Evidence assemblySecurity, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile, Evidence security
Evidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
at NetExp.Main(String[] args)

=== Pre-bind state information ===
LOG: Where-ref bind. Location = D:\IKVM\test1\GetWindows\bin\Release\GetWindows.dll
LOG: Appbase = D:\IKVM\ikvmbin-0.22.0.0\ikvm-0.22.0.0\bin\
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///D:/IKVM/test1/GetWindows/bin/Release/GetWindows.dll.

Dann habe ich die Assembly mal in den GAC eingetragen (dort wird sie auch angezeigt, alles schön und gut). Aber er findet die Assembly nicht:

D:\IKVM\test1>..\ikvmbin-0.22.0.0\ikvm-0.22.0.0\bin\ikvmstub.exe GetWindow
Error: Assembly "GetWindow" not found

Wenn ich das aber zum Beispiel mit System als Parameter aufrufe, funktioniert es...

Weiß jemand woran das liegt?

15.06.2005 - 22:19 Uhr

Grml so simpel, da gibts nen set 😁 Und damit schlag ich mich jetzt schon ne ganze Zeit rum 😉
Na ja, Danke auf jeden Fall 👍.

15.06.2005 - 21:21 Uhr

Ich habe ein Form, zu dem ein UserControl hinzugefügt ist. Dock hab ich auf Fill gesetzt. Es kann nun vorkommen, dass das UserControl (eigene abgeleitete Klasse) die Fenstergröße verändern will. Das soll nun in der Methode Rebuild geschehen. Mein bisheriger Ansatz war der, dass ich zu der gewünschten Höhe die Diffenernz aus Size.Height und ClientSize.Height addiere (analog für die breite):

void Rebuild()
{
jf.Size = new Size (model.Width * 15 + jf.Size.Width - jf.ClientSize.Width, model.Height * 15 + jf.Size.Height - jf.ClientSize.Height);
Refresh();
}

jf is das Form und model.Width * 15 auf model.Height * 15 die Größe, die das UserControl erhalten soll. Mit obiger Methode wird das Fenster allerdings etwas (geschätzt 25-30px) zu niedrig. Kann das an dem Menu liegen, das dem Form hinzugefügt ist? Oder geht das ganz anders einfacher (So wie z.B. in Java mit nem LayoutManager und Container.pack())? Oder was is falsch 😉 ?

20.07.2004 - 14:54 Uhr

Na, dann bin ich ja schon der dritte Gott hier.
Auch wenn der Illuvatar aus dem Herr der Ringe Universum vielleicht noch etwas fiktiver ist, als die anderen Götter (hier).

18.07.2004 - 17:29 Uhr

Hi stevg
Lustig, als Mitglied beider Foren 😁Siehe auch hier.

Java-GUIs können übrigens auch besser aussehen (siehe z.B. Anhang).

16.07.2004 - 16:47 Uhr

Original von hauptmann
Gegenfrage: Was bringt es mir nicht? 😄

Genau mich anschließ

04.07.2004 - 21:00 Uhr

Ich mache das jetzt so:

while (!interrupted){
if (ss.Pending()){
TcpClient tc = ss.AcceptTcpClient();
...
}else{
Thread.Sleep (350);
}
}

### edit by alex ###
Anscheinend gibt es in diesem Thread einen Fehler (es kann keine Antwort erstellt werden). Ich bitte jeden, bei dem das Problem auftritt mir eine E-Mail oder private Nachricht zu schreiben.
Danke.

01.07.2004 - 16:25 Uhr

Ja gut, dann probiere ich das so. Ich kann ja Thread#Join und Thread#Abort verwenden.

<offtopic>Ich mache halt hauptsächlich Java, und da kann ich bei einem ServerSocket einfach die Methode setSoTimeout verwenden, und die accept() - Methode bricht dann mit einer SocketTimeoutException ab... 😁 Und in Java kann Thread#Stop Speicherleaks verursachen, deshalb war ich da abgeneigt.</offtopic>

01.07.2004 - 13:40 Uhr

Ich versteh nicht ganz, was du meinst.
Meinst du, dass ich zusätzlich zur AcceptTcpClient() - Methode einen Thread starte, der auf das Timeout wartet? Und wie kann ich dann die AcceptTcpClient - Methode unterbrechen?

30.06.2004 - 21:22 Uhr

Gibt es eine Möglichkeit, für die AcceptTcpClient - Methode einen Timeout zu setzen?

29.06.2004 - 14:23 Uhr

Ja, das wars, danke

29.06.2004 - 14:07 Uhr

Wie kann ich ein Form so schreiben, dass es, wie zum Beispiel in einem Splashscreen, keine Titelleiste und ähnliches hat?
In Java geht das einfach mit einem Window oder Frame.setUndecorated(), aber in C# hab ich noch nichts gefunden.