Auf Button-Klicks reagieren


Ach wie schön kann doch die VCL sein: hier packen Sie Ihren Button auf Ihr Formular, klicken doppelt drauf und schreiben den Code in den Quelltexteditor, der beim Klick ausgeführt werden soll. Ohne die VCL ist es zwar nicht ganz so einfach, aber wenn man das Prinzip einmal verstanden hat, dann verzieht man das Gesicht auch nicht mehr. :o)

In diesem Fall benötigen wir die Nachricht WM_COMMAND, die gesendet wird, wenn der Anwender einen Menübefehl aufruft, einen Shortcut wählt ... oder wenn ein Element eine Benachrichtigung ("notification message") an sein übergeordnetes Fenster schickt.
Wenn die Nachricht also auftritt, dann wird zuerst geprüft welches Ereignis sie ausgelöst hat. Handelt es sich um ein Button-Klickereignis ("BN_???"-Messages), dann wäre also geklärt, dass ein Button gedrückt wurde. Bleibt die Frage: Welcher war es? Dazu wird das niederwertige Wort von wParam geprüft, das die ID enthält.
Da der Benutzer in unserem Beispiel damit rechnet, dass dieser Button das Programm beendet, wollen wir ihm den Gefallen mal tun. Wir senden also die Nachricht "WM_DESTROY" (alternativ geht auch "WM_CLOSE"), und das Programm beendet sich. Im Code sieht das dann so aus:

WM_COMMAND:
  begin
    if hiword(wParam) = BN_CLICKED then
      case loword(wParam) of
        IDC_BUTTON: SendMessage(hwnd, WM_DESTROY, 0, 0);
      end;
  end;