Zitat von
Taladan:
PS: Ich habe mir vorgenommen die Komponente nicht nur zu verwenden, sondern möglichst auch zu verstehen, was ich verwende... (hoffentlich klappt das)
Guter Vorsatz!
Du solltest aber flexibler im Umgang mit dem
MSDN, der .Net
OH und der spachreferenz von D.Net sein.
Zitat von
Taladan:
Was ich nur überhaupt nicht zuordnen kann, und damit die Übersetzung übersetzten sind diese Zeilen:
Na dann...
strict private class extern function SendMessage(hWnd: IntPtr; msg: Message; wParam: IntPtr; lParam: IntPtr): IntPtr; static;
Das ist die Deklaration einer externen Funktion. also einer, die nicht durch .Net sondern von einer
Win32 DLL bereitgestellt wird.
Delphi-Quellcode:
strict private CharFormat2Effect = (Link=32, None=0);
strict private CharFormat2Mask = (Link=32);
strict private Message = (GetCharFormat=1082, SetCharFormat=1092, User=1024);
Das sind Aufzählungstypen ähnlich zu denen aus Delphi32.
Ich halte es in den meisten Fällen für eine schlechte Idee in .Net normale numerische Konstanten zu verwenden.
Erstens müllt man sich schnell mit kryptischen Bezweichnern zu und zweitens sind Auzählungen type safe.
Du kannst einer Variable vom Typ Message nur Werte vom Typ Message zuweisen, aber du kannst einen Message-Wert immer von<->zu seinem Basistypen umwandeln. (hier der Standardtyp für Aufzählungen: Integer/Int32)
Da Aufzählungen zur Laufzeit exakt das gleiche Verhalten wie eine numerische Konstante haben gibt es keinerlei Nachteile.
Ich hatte die Deklaration von SendMessage so geändert, dass es msg vom Typen Message schluckt.
Der Marshaler wird es automatisch als richtigen numerischen Wert behandeln, aber zur compilezeit bekommst du einen Fehler, wenn du einen anderen (hier sinnlosen) Wert zuweisen willst.
Möglich sind hier also nur die 3 Werte:
Delphi-Quellcode:
Message.GetCharFormat
Message.GetCharFormat
Message.User
Ich hoffe das half etwas weiter...