Home » Tutorials » VCL » Komponenten zur Laufzeit erstellen

Komponenten zur Laufzeit erstellen

Arbeiten mit Ereignissen

Wir wollen jetzt auf das Drücken eines Buttons reagieren.
Dazu brauchen wir eine Prozedur, genauer gesagt eine Ereignisbehandlungsmethode. Diese Prozedur soll „ShowButtonCaption“ lauten. Diese soll nur die „Caption“ in „MyRichedit“ einfügen.
„TForm1.“ bedeutet, dass diese Methode Teil der Klasse TForm1 ist. Der Prozedurkopf ist „komplett“ in den Public-Abschnitt der Klassendeklaration zu kopieren. Das „TForm1“ muss dann natürlich entfernt werden.

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  public
    procedure ShowButtonCaption(Sender: TObject);
  end;

var
  Form1: TForm1;
  MyRichedit: TRichedit;
  MyToolbar: TToolbar;

implementation

procedure TForm1.ShowButtonCaption(Sender: TObject);
begin

end;

Woher wissen wir eigentlich, welcher Button gedrückt wurde? Wir bekommen den Button oder eine andere Komponenten als Referenz über „Sender: TObject“ mitgeliefert.
Schreiben wir nun Folgendes:

if sender is TToolButton then begin

Damit fragen wir ab, ob der Sender auch wirklich ein TToolbutton ist.
Jetzt gibt es zwei Möglichkeiten, um mit „Sender“ zu arbeiten. „TToolbutton(Sender)“ oder „(Sender as TToolbutton)“. Beide funktionieren; es gibt aber einen Unterschied: Bevor „as“ einen Typ in einen anderen umwandelt (in unserem Fall den allgemeinen Typ TObject in unseren konkreten TToolbutton), wird getestet, ob eine Umwandlung überhaupt zulässig ist. Falls eine Umwandlung nicht möglich ist tritt eine EInvalidCast-Exception auf. Da wir das über die „is“-Zeile aber bereits prüfen, können wir auch die direkte Typumwandlung ohne „as“ verwenden.
Wir schreiben in eine Variable den Wert von Caption und fügen ihn dann in das Richedit ein.

procedure TForm1.ShowButtonCaption(Sender: TObject);
var ButtonCaption: String;
begin
  if Sender is TToolButton then begin
    ButtonCaption := TToolButton(Sender).Caption;
    ButtonCaption := (Sender as TToolbutton).Caption;
    MyRichedit.Lines.Add(ButtonCaption);
  end;
end;

Nun fehlt nur noch die Zuweisung des Ereignisses zum ToolButton. Dazu gehen wir in die „Create“-Anweisung des Formulars und schreiben in die for-Schleife

MyToolButton.OnClick := ShowButtonCaption;

Damit wird immer beim Klicken eines Buttons (OnClick-Ereignis) die Prozedur angesprochen und als Sender der angeklickte Button übergeben.