- 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); }