Einzelnen Beitrag anzeigen

terence14
(Gast)

n/a Beiträge
 
#5

AW: verschiedene label mittels variable ansteuern/eigenschaften ändern

  Alt 15. Jan 2013, 09:43
Hallo,
Du kannst die Komponenten dynamisch zur Laufzeit
erstellen. Der Vorteil, Du kannst die dann per
for-Schleife durchlaufen und die Properties setzen.

Beispiel:

Delphi-Quellcode:

Komponenten zur Laufzeit erzeugen

Normalerweise werden die meisten Komponenten, die ein
Programm benötigt, schon zur Entwicklungszeit auf dem
Formular platziert. Ist die Anzahl der benötigten
Komponenten zur Entwicklungszeit noch nicht absehbar,
müssen sie dynamisch erstellt werden.

Dieses Beispiel erstellt einen TButton und weist ihm
eine OnClick-Routine zu:

procedure TForm1.Button1Click(Sender: TObject);
var
**Button: TButton;
begin
**Button:=TButton.Create(Self);
**Button.Parent := Self;
**Button.Caption := 'Alter Titel';
**Button.Left := 100;
**Button.Top := 100;
**Button.OnClick := Button2Click;
end;

Wichtig ist, dass die Eigenschaft Parent gesetzt wird,
um die Komponente eindeutig einer übergeordneten
Komponente zuzuordnen. Dies ist häufig ein Formular oder
ein TPanel oder TGroupbox. Self bezieht sich immer auf
die aktuelle Klasseninstanz also in diesem Fall auf Form1.
Man könnte also statt Self auch Form1 schreiben. Das
funktioniert aber dann nicht mehr, wenn es mehr als
eine Formularinstanz gibt. Deshalb sollte man self
immer vorziehen.

In der Behandungsroutine des OnClicks-Ereignis wird die
Sender-Variable ausgewertet, um die auslösende Komponente
des Klicks zu ermitteln:

procedure TForm1.Button2Click(Sender: TObject);
begin
**if Sender is TButton then
****TButton(Sender).Caption:='Neuer Titel';
end;

Die Button2Click-Prozedur muss noch in der Klassendeklaration
von TForm1 aufgenommen werden:

private
**procedure Button2Click(Sender: TObject);

Mit einem Klick auf den dynamisch erstellten Button sollte
sich der Titel des Buttons ändern.

Eine weitere Lösung ist die Verwendung eines dynamischen
Arrays. Dadurch wird der Zugriff auf die Komponenten später
einfacherer.

Im folgenden Beispiel wird eine zufällige Zahl von
TEdit-Feldern erstellt und untereinander auf dem Formular
platziert.

Zunächst muss das Array als Feld-Variable in der
Klassendeklaration des Formulars erstellt werden:

private
**EditArray: array of TEdit;

Der Quelltext zum Erstellen sieht folgendermaßen aus:

procedure TForm1.Button1Click(Sender: TObject);
var
**i: Integer;
begin
**SetLength(EditArray, Count);
**for i:=0 to 4 do
**begin
****EditArray[i] := TEdit.Create(Self);
****EditArray[i].Parent := Form1;
****EditArray[i].Left := 20;
****EditArray[i].Top := 20 + ((EditArray[i].Height + 10) * i);
**end;
end;

Über den Array-Index lassen sich die einzelnen Controls
ansprechen.
MfG,
terence
  Mit Zitat antworten Zitat