Code: Alles auswählen
procedure WMMove(var Message: TLMMove); message LM_MOVE;
procedure WMSize(var Message: TLMSize); message LM_SIZE;
Gibt es eine Erklärung dafür, wie dies in etwa funktioniert ?
Code: Alles auswählen
procedure WMMove(var Message: TLMMove); message LM_MOVE;
procedure WMSize(var Message: TLMSize); message LM_SIZE;
Dann wird dies unter Linux ähnlich sein.Die wndproc Prozedur ruft dann automatisch die entsprechenden Methoden auf,
Code: Alles auswählen
wm_delete_window := XInternAtom(dis, 'WM_DELETE_WINDOW', False);
Vorwiegend wird dies im Zusammenhang mit der Ereignisbehandlung von GUI-Anwendungen verwendet, der Mechanismus an sich ist jedoch unabhängig davon. Eine Methode, welche einen message Modifizierer hat darf einen einzigen var-Parameter haben, welcher vom Typ record ist und als erstes Feld entweder einen 32-bit Wert oder einen ShortString hat (je nachdem, was bei message ConstantIdentifier angegeben ist. Aufrufen kannst du es dann mittels der Dispatch- oder DispatchStr-Methode (wieder je nach Typ) und einem passendem record. Je nach Wert des ersten Felds wird dann die passende Methode aufgerufen oder DefaultHandler bzw. DefaultHandlerStr, falls keine entsprechende Methode gefunden wird. Dabei ist es egal wann in der Klassenhierarchie die Methode deklariert ist. Außerdem sind diese immer implizit virtual.Mathias hat geschrieben: ↑Fr 11. Nov 2022, 16:32Wen ich in den Sourcen von der LCL gucke, finde ich mehrfach das Schlüsselwort "message"Ich vermute mal, das dies mit den Event-Handle des OS zu tun hat.Code: Alles auswählen
procedure WMMove(var Message: TLMMove); message LM_MOVE; procedure WMSize(var Message: TLMSize); message LM_SIZE;
Gibt es eine Erklärung dafür, wie dies in etwa funktioniert ?
Code: Alles auswählen
TForm1 = class(TForm)
private
procedure LMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN;
Code: Alles auswählen
procedure TasteGerdrueckt(var Message: TLMKeyDown); message LM_KEYDOWN;