Botschaften verteilen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Das Botschaftsbehandlungssystem


Wenn eine Anwendung ein Fenster erzeugt, registriert sie eine Fensterprozedur im Windows-Kernel. Diese Fensterprozedur ist die Routine, die Botschaften für das Fenster behandelt. Üblicherweise enthält die Fensterprozedur eine umfangreiche case-Anweisung mit einem Eintrag für jede Botschaft, die das Fenster behandeln muss. Der Begriff "Fenster" bezieht sich hier auf alles, was sich auf dem Bildschirm befindet (alle Fenster, alle Steuerelemente usw.). Bei jeder Erstellung eines neuen Fenstertyps müssen Sie auch eine vollständige Fensterprozedur definieren.

Die VCL vereinfacht die Botschaftsverteilung mit den folgenden Mechanismen:

  • Jede Komponente erbt ein vollständiges System zur Botschaftsverteilung.
  • Das Verteilungssystem stellt eine Standardbehandlung für die Botschaften bereit. Sie brauchen deshalb Behandlungsroutinen nur für diejenigen Botschaften zu definieren, die eine spezielle Antwort erfordern.
  • Sie können kleinere Abschnitte der Botschaftsbehandlungsroutine ändern, die meisten Verarbeitungsschritte aber den geerbten Methoden überlassen.

Der größte Vorteil dieses Botschaftsbehandlungssystems liegt in der Tatsache, dass jede Botschaft jederzeit an jede beliebige Komponente gesendet werden kann. Wenn die Komponente keine Behandlungsroutine für die Botschaft bereitstellt, wird die Standard-Botschaftsbehandlung aktiviert (im Normalfall heißt dies, die Botschaft wird ignoriert).

Den Botschaftsfluss verfolgen

Die VCL registriert für jeden Komponententyp in einer Anwendung eine Methode mit dem Namen MainWndProc als Fensterprozedur. MainWndProc enthält einen Block zur Exception-Behandlung, in dem die Botschaftsstruktur von Windows an eine virtuelle Methode namens WndProc übergeben wird. Die Behandlung von Exceptions erfolgt durch einen Aufruf der Methode HandleException der Anwendungsklasse.

MainWndProc ist eine nicht-virtuelle Methode, in der keine spezielle Behandlung für bestimmte Botschaften definiert ist. Anpassungen müssen in der Methode WndProc vorgenommen werden, da jeder Komponententyp die Methode für seine speziellen Bedürfnisse überschreiben kann.

WndProc-Methoden testen alle Bedingungen, die sich auf ihre Verarbeitung auswirken könnten. Sie sind damit in der Lage, unerwünschte Botschaften "abzufangen". Beispielsweise ignorieren Komponenten, die gerade mit der Maus gezogen werden, alle Tastaturereignisse. Die WndProc-Methode von TWinControl gibt Tastaturereignisse also nur dann weiter, wenn die Komponente nicht gezogen wird. Zum Schluss ruft WndProc immer die Methode Dispatch auf. Dispatch ist eine nicht-virtuelle, von TObject geerbte Methode, die feststellt, welche Methode zur Behandlung der Botschaft aufgerufen werden muss.

Dispatch ermittelt mit Hilfe des Felds Msg in der Botschaftsstruktur, wie eine bestimmte Botschaft verteilt werden muss. Wenn eine Komponente eine Behandlungsroutine für die Botschaft definiert, wird diese von Dispatch aufgerufen. Andernfalls ruft Dispatch die Methode DefaultHandler auf.