![]() |
Eine Message senden
Hallo!
Ich möchte innerhalb meines Programms eine Nachricht senden. Wenn diese empfangen wird, soll eine Procedure ausgeführt werden. Leider bin ich mithilfe der Suchfunktionen der DP und auch der EE nicht wesentlich weiter gekommen. Folgenden Codeschnipsel habe ich:
Delphi-Quellcode:
Fragen: Ich möchte
const
WM_LOESCHMICH = WM_USER + 123; // die Message (immer als WM_USER + irgendeine Zahl deklarieren) type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private procedure LoeschMich(var Msg: TMessage); message WM_LOESCHMICH; // der MessageHandler public { Public-Deklarationen } end; implementation procedure TForm1.Button1Click(Sender: TObject); begin PostMessage(Handle, WM_LOESCHMICH, Integer(Sender), 0); // an Form senden (Handle), in WParam den Button stecken end; procedure TForm1.LoeschMich(var Msg: TMessage); begin TObject(Msg.WParam).Free; // WParam nach TObject casten und freigeben end;
Delphi-Quellcode:
innerhalb einer Klasse deklarieren. Wo muss dann hin? Und was hat WM_User zu bedeuten?
const
WM_LOESCHMICH = WM_USER + 123; // die Message (immer als WM_USER + irgendeine Zahl deklarieren) Genauso wenig verstehe ich folgende Zeile:
Delphi-Quellcode:
Wer kann mir helfen?
TObject(Msg.WParam).Free; // WParam nach TObject casten und freigeben
|
Re: Eine Message senden
Hi.
Zu deiner ersten Frage: deine Konstante gehört dahin wo sie ist. Man deklariert keine Konstanten in einer Klasse. Zu deiner zweiten Frage: Der Pointer auf den Button wurde in wParam als 32-bit Ganzzahl transportiert und muss wieder als TObject interpretiert werden, sonst kommst du nicht an seine Methodentabelle. Grüße vom marabu |
Re: Eine Message senden
Und was hat das WM_User zu bedeuten?
|
Re: Eine Message senden
Alle message numbers unterhalb WM_USER sind bereits reserviert bzw. in Verwendung.
marabu |
Re: Eine Message senden
Zitat:
|
Re: Eine Message senden
Zitat:
...:cat:... |
Re: Eine Message senden
Hi!
Dürfte ich an dieser Stelle eine kleine Verständnisfrage einschieben? Was passiert, wenn ich eine Message in meinem Programm als WM_USER+37 definiere und ein anderes Programm will auch ne Message mit WM_USER+37 haben? Werden dann beide "Events" ausgelöst? Ciao Frederic |
Re: Eine Message senden
Hi Frederic,
deine custom messages haben nur lokale Bedeutung. Willst du sie programmübergreifend verwenden, dann musst du dir eine message number von Windows zuteilen lassen. Siehe auch ![]() Grüße vom marabu |
Re: Eine Message senden
Hi!
ah, Perfekt! Danke! Ciao Frederic |
Re: Eine Message senden
Zitat:
...:cat:... |
Re: Eine Message senden
Ich habe das Problem noch immer. Also eine Botschaft zu senden usw. ist nicht das Problem, wenn ich ein neues Projekt öffne, jedoch benutze ich in dem Projekt, wo der Fehler auftritt, die Klasse TMarkfile (maf.pas) und ich finde mich aufgrunddessen damit nicht zurecht. Es ist hier
![]() |
Re: Eine Message senden
Kann mir den niemand helfen?
|
Re: Eine Message senden
Wo geht es den jetzt weiter? In diesem Thread oder hier:
![]() |
Re: Eine Message senden
Also erstmal sollte man sich den Unterschied von PostMessage und SendMessage vor Augen führen. PostMessage würde ich nur unter sehr sehr ausgewählten Umständen zusammen mit einem Pointer benutzen!!!
SendMessage ist sozusagen ein "blocking call". Wenn SendMessage zurückkehrt, weißt du, daß der Empfänger die Nachricht abgearbeitet hat, bei PostMessage ist dies nicht der Fall. Fensternachrichten selber sind nur ganz einfache Zahlen ("Konstanten") denen im Rahmen des Quellcodes symbolische Namen zugewiesen sind (WM_GETTEXT usw.). Manche haben eine Bedeutung für jedes beliebige Fenster (WM_DESTROY, WM_CLOSE), manche nur für bestimmte Fenster (CB_*, LB*, ...) und dann ist noch unterscheiden zwischen denen die als Kommando geschickt werden und denen die eher als Benachrichtigung empfangen werden (letztere werden meist ausschließlich vom System geschickt). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz