Eine neue Botschaftsbehandlungsmethode deklarieren
Nach oben zu Neue Routinen zur Botschaftsbehandlung erstellen
Es gibt zwei Situationen, in denen die Deklaration neuer Botschaftsbehandlungsmethoden erforderlich ist:
- Ihre Komponente muss eine Windows-Botschaft verarbeiten, die von den Standardkomponenten noch nicht behandelt wird.
- Sie haben eine eigene Botschaft für die interne Verwendung in Ihren Komponenten definiert.
So deklarieren Sie eine Botschaftsbehandlungsmethode:
- Deklarieren Sie eine Prozedurmethode – vorzugweise im protected- oder private-Abschnitt der Klassendeklaration der Komponente.
- Am besten benennen Sie die Methode nach der Botschaft, die sie behandeln soll. Lassen Sie dabei aber den Unterstrich weg.
- Übergeben Sie einen einzelnen var-Parameter namens Message mit dem Typ TMessage.
- Fügen Sie die Direktive message am Ende der Deklaration der Prozedur hinzu, und geben Sie den Code der Botschaft an, die die Methode behandeln soll.
-
Wenn Sie C++ verwenden, dann müssen Sie auch unmittelbar nach der Methodendeklaration eine Botschaftszuordnung mit der folgenden Syntax erstellen:
BEGIN_MESSAGE_MAP MESSAGE_HANDLER(msgCode, msgType, msgHandler) END_MESSAGE_MAP
Der Parameter msgCode repräsentiert den Code der Botschaft, die die Methode behandelt. Der Parameter msgType repräsentiert den Typ des Parameters var der Methode, der in der Regel ein TMessage-Typ ist, wie in Schritt3 angegeben. Der Parameter msgHandler gibt den Namen der Behandlungsmethode an, der mit dem Namen der Prozedur identisch sein muss.
Fügen Sie Code, der eine komponentenspezifische Behandlung durchführt, in die Implementierung der Botschaftsbehandlungsmethode ein.
Rufen Sie die geerbte Botschaftsbehandlungsmethode auf, wenn das Ereignis auch von Botschaftsbehandlungsmethoden des Vorfahren behandelt werden soll.
Hinweis: Um spezifischere Botschaften zu behandeln, kann der Typ des var-Parameters auch TWMKey, TWMMouse, TWMPaint, TWMMenuChar, TWMNotify oder TWMLButtonDown sein.
Hinweis: Eine vollständige Liste aller Codes von vordefinierten Botschaften, die mit der Direktive message verwendet werden können, finden Sie in der Liste der Konstanten der Unit Messages. Sie können auch eine neue Botschaftsart erstellen. Siehe dazu das Thema Eigene Botschaften definieren.
Weitere Informationen zum Deklarieren einer neuen Botschaftsbehandlungsmethode finden Sie im Abschnitt Botschaftsmethoden des Themas Methoden.
Beispiel
Nachstehend finden Sie die Beispiel-Deklaration einer Botschaftsverarbeitungsroutine für eine benutzerdefinierte Botschaft mit dem Namen CM_CHANGECOLOR.
const
CM_CHANGECOLOR = WM_APP + 400;
type
TMyComponent = class(TControl)
.
.
.
protected
procedure CMChangeColor(var Message: TMessage); message CM_CHANGECOLOR;
end;
procedure TMyComponent.CMChangeColor(var Message: TMessage);
begin
{ set color from long parameter }
Color := Message.lParam;
{ call the inherited message handler }
inherited;
end;
#define CM_CHANGECOLOR (WM_APP + 400)
class TMyControl : public TControl
{
.
.
.
protected:
void __fastcall CMChangeColor(TMessage &Message);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_CHANGECOLOR, TMessage, CMChangeColor)
END_MESSAGE_MAP(TControl)
};
void __fastcall TMyControl::CMChangeColor(TMessage &Message)
{
// set color from long parameter
Color := Message.lParam;
// call the inherited message handler
TControl::CMChangeColor(Message);
}