- als erstes im public-Teil der Form-Headerdatei (von der Form, in der die Messages empfangen werden sollen) Messagehandler (Makro), die zugehörigen Funktionen und die Messages definieren
#define WM_TEST_MSG 10000 // Wert für die Message festlegen
class TForm1 : public TForm
{
__published:
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // durch die Message aufgerufene Funktion
void __fastcall TestFunktion(TMessage M);
public:
__fastcall TForm1(TComponent* Owner);
// Message-Map verwaltet die eigentlichen Messages
BEGIN_MESSAGE_MAP
// Aufruf: VCL_MESSAGE_HANDLER(Message-Id, Typ, selbstdefinierte Aufruf-Funktion)
VCL_MESSAGE_HANDLER(WM_TEST_MSG, TMessage, TestFunktion);
END_MESSAGE_MAP(TForm) // "TForm" bedeutet, dass der Handler zum Standard-TForm Messagehandler hinzugefügt wird
};
- in der Form-CPP die Messagefunktionen programmieren, mit WParam und LParam können beliebige Parameter über die Message mitgeschickt werden
void __fastcall TForm1::TestFunktion(TMessage M)
{
TForm::Dispatch(&M);
AnsiString sAusgabeText = "Message angekommen, WParam="+IntToStr(M.WParam)+" LParam="+IntToStr(M.LParam);
ShowMessage(sAusgabeText);
}
// Aufrufen (Auslösen) der Message, Typ 1:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Message "WM_TEST_MSG" an Form1 senden
// und auf deren Ausführung warten
// WParam = 0
// LParam = 0
SendMessage(this->Handle, WM_TEST_MSG, 0, 0);
}
// Aufrufen (Auslösen) der Message, Typ 2:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// Message "WM_TEST_MSG" an Form1 in den MessageQueue
// senden und sofort zurückkehren (nicht auf die Ausführung warten)
// WParam = 0
// LParam = 0
PostMessage(this->Handle, WM_TEST_MSG, 0, 0);
}