Eine Botschaft mit der Windows-Botschaftswarteschlange senden

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Botschaften senden


In einer Multithread-Anwendung können Sie die Methode Perform nicht so einfach aufrufen, weil sich das empfangende Steuerelement in einem anderen Thread befindet als das sendende. Deshalb müssen Sie die Windows-Botschaftswarteschlange benutzen, die sicher mit anderen Threads kommunizieren kann. Die Botschaftsbehandlung erfolgt zwar stets im Haupt-VCL-Thread, aber Sie können eine Botschaft mit der Windows-Botschaftswarteschlange aus jedem Thread der Anwendung senden. SendMessage arbeitet synchron, gibt also erst dann einen Wert zurück, wenn das Zielsteuerelement die Botschaft verarbeitet hat, auch wenn es in einem anderen Thread liegt.

Mit dem Windows-API-Aufruf SendMessage senden Sie eine Botschaft über die Windows-Botschaftswarteschlange an ein Steuerelement. SendMessage erwartet dieselben Parameter wie die Methode Perform, mit dem Unterschied, dass Sie zur Identifizierung des Empfängers das Windows-Handle des Zielsteuerelements übergeben müssen. Daher ist die Anweisung

MsgResult := TargetControl.Perform(MY_MYMESSAGE, 0, 0);
MsgResult = TargetControl->Perform(MY_MYMESSAGE, 0, 0);

schreiben Sie also:

MsgResult := SendMessage(TargetControl.Handle, MYMESSAGE, 0, 0);
MsgResult = SendMessage(TargetControl->Handle, MYMESSAGE, 0, 0);

Einzelheiten über die Funktion SendMessage enthält die MSDN-Dokumentation von Microsoft. Informationen über die Erstellung und gleichzeitige Ausführung von Threads finden Sie unter Threads koordinieren.

Siehe auch