Tech-Ecke / Delphi Inhalt / FindComponent- und Sender-Methode

 

     FindComponent - Methode

Mit der Methode FindComponent kann man eine Komponente über deren Klasse + Namen (als String) ansprechen.

   TButton(FindComponent('Button1')).Caption := 'TestKnopf';
 

Eine interessante Anwendung ist z.B., wenn man an mehreren Komponenten des gleichen Typs eine gleiche Änderung  vornehmen möchte. Das folgende Beispiel zeigt wie man 10 TEditfelder in einem Rutsch rot einfärbt, ohne für jedes Feld eine eigene Anweisung zu schreiben. Vorraussetzung ist, dass die Namensgebung wie folgt gegeben ist: Edit1, Edit2, Edit3...Edit10.

  var
     n: Integer;
.
.
.


for n := 1 to 4 do
     TEdit(FindComponent('Edit'+IntToStr(n))).Color := clRed ;
 

Formübergreifend

FindComponent ist eine Methode der Form, befindet sich also die Komponente der Begierde auf einer anderen Form, so muss auf die Methode dieser Form zugegriffen werden. Angenommen die Komponente würde auf der Form2 liegen, so würde das wie folgt aussehen:

   TEdit(Form2.FindComponent('Edit1')).Color := clRed ;
 

 

     Sender - Methode

Bei einem Ereignis zu einem Contol-Objekte wie TButton, TCheckBox... usw. wird das entsprechende Control über die Variable "Sender" als TObject mitgeliefert. Dieses Verhalten kann man nutzen, um beispielsweise herauszufinden, welche Buttons aus einer Gruppe von Buttons gerade gedrückt wurde, ohne hinter jedem Button ein eigenes OnClick-Event zu schreiben. Es wird also nur ein Code für alle Buttons benötigt, auf die dann alle Buttons über das OnClick-Event zugreifen. Wurde der Code wie hier im Beispiel bei OnClickButton1 hinterlegt, so muss im Objektinspektor für jeden Button auf das OnClick-Event des Button eins verwiesen werden.

Beispiel 1.   -> Direkt über das Control

  procedure TFormButtons.Button1Click(Sender: TObject);
begin
   if Sender = Button1 then ShowMessage(' Button1 wurde gerade gedrückt');
end;
 

Beispiel 2.   -> Über eine Eigenschaft, hier die Caption

  procedure TFormButtons.Button1Click(Sender: TObject);
var
       WelcherButton: String;
begin
   WelcherButton := TButton(Sender).Caption;
   ShowMessage(WelcherButton + ' wurde gerade gedrückt');
end;
 

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 16.11.2009]