Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Message-Problem
GuaAck - Mo 17.11.14 23:37
Titel: Message-Problem
Hallo Experten,
ich habe einen Prozess mit einem Hauptthread und einem "Weiterer-Thread", der Daten erzeugt, die im Haupthread ausgewertet werden müssen. Wenn ein Block Daten erzeugt ist, dann schickt der "Weiterer-Thread" dem Hauptthread eine Message, worauf der die Auswertung macht.
Nun mein Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
|
TYPE TMyForm = CLASS(TForm) PRIVATE PROCEDURE PWM_WasZuMachen(VAR msg: TMsg); PROCEDURE AppMessage(VAR msg: TMsg; VAR Handled: boolean); END;
PROCEDURE TMyForm.AppMessage(VAR msg: TMsg; VAR Handled: boolean); BEGIN IF (msg.message = WM_WasZuMachen) THEN BEGIN PWM_WasZuMachen(msg); Handled := true; END END;
PROCEDURE TMyForm.PWM_WasZuMachen; BEGIN ... END;
PROCEDURE TMyForm.FormCreate(Sender: TObject); BEGIN Application.OnMessage := AppMessage; END;
TYPE TMyForm = CLASS(TForm) PRIVATE PROCEDURE PWM_WasZuMachen(VAR msg: TMsg); MESSAGE WM_WasZuMachen; END;
PROCEDURE TMyForm.PWM_WasZuMachen; BEGIN ... END; |
Muss man für den Meassage-Handler von Delphi noch was konfigurieren?
Bin gespannt,
Gruß GuaAck
baumina - Di 18.11.14 08:20
Da ich nicht ganz verstehe was du unter "das geht nicht" verstehst, hier ein kleiner Vorschlag:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
|
TYPE TMyForm = CLASS(TForm) PRIVATE PROCEDURE PWM_WasZuMachen(VAR msg: TMsg); MESSAGE WM_WasZuMachen; END;
PROCEDURE TMyForm.PWM_WasZuMachen(VAR msg: TMsg); BEGIN ... END; |
jaenicke - Di 18.11.14 08:21
Du schickst die Message vermutlich an das falsche Fensterhandle. Wie sieht denn der Quelltext zum Senden aus?
Für die Threadkommunikation macht eine von TForm abgeleitete Klasse aber ohnehin keinerlei Sinn. Schau dir am besten einmal den Quelltext von TTimer an. Der ist sehr kompakt und zeigt sehr gut wie du dir selbst ein Fensterhandle registrierst und damit arbeitest.
baumina hat folgendes geschrieben : |
Da ich nicht ganz verstehe was du unter "das geht nicht" verstehst, hier ein kleiner Vorschlag: |
Den Parameter unten unter implementation wegzulassen ist zwar äußerst schlechter Programmierstil, funktioniert aber problemlos. Das macht also von der Funktionalität her keinen Unterschied.
GuaAck - Di 18.11.14 20:23
Danke Jaenicke,
richtig vermutet: Ich schickte die Message an Application.handle. Ich muss sie an das Handle des Forms schicken, jetzt geht es auch.
Gruß
Guaack
GuaAck - Mi 19.11.14 00:47
Nachtrag:
TMsg ist falsch, man muss TMessage nehmen.
Gruß GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!