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);
Das macht dort auch nicht X11 sondern GTK und Qt.Mathias hat geschrieben: Fr 11. Nov 2022, 16:55 Ich beschäftige mich momentan mit mit der direkten Programmierung von X11.
Da musste mich aber nicht mit solchen "messages" rumschlagen.
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:32 Wen 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 ?
Vereinfacht formuliert ist das so, ja.Mathias hat geschrieben: Mo 14. Nov 2022, 09:00 Wen ich es richtig verstanden habe, dient das dazu, das eine GUI wie GTK nicht so grosse Event Blöcke mit "case of" haben ?
Mit den vielen Onxxxx Ereignissen in der LCL, bräuchte es sonst riesen "case of" Blöcke.
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;