![]() |
Controls per arrays verwalten und / oder erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Da hier ab und zu mal die Frage nach Handling von Buttons (o.ä.) per array auftaucht,
hier 'mal eine kleine Anleitung : Im folgenden Beispiel werden 6 Buttons per array angesprochen und 6 weitere Buttons zur Laufzeit erstellt. 1) auf der Form befinden sich die 6 Buttons, die per array angesprochen werden sollen. Wir gehen davon aus, dass es Buttons mit den Bezeichnung : Button1, Button2, . . . Button6 sind. Als erstes müssen wir das Array definieren:
Delphi-Quellcode:
damit wir später auch wissen, welcher Button des Arrays gedrückt wurde,
private
{ Private declarations } BTN1 : array[1..6] of TButton; // Array für bereits vorhandene Buttons BTN1Sender : TObject; // Sender der Buttons im array BTN1 benötigen wir noch eine Variable vom Typ TObject (hier BTN1Sender) Im OnCreate-Ereignis der Form weisen wir dem Array die Buttons zu:
Delphi-Quellcode:
jetzt markieren wir alle 6 Buttons und erzeugen per Doppel-Click im Object-Inspector
procedure TForm1.FormCreate(Sender: TObject);
var i : Integer; begin for i := 1 to 6 do BTN1[i] := FindComponent(Format('Button%d', [i])) as TButton; // die Buttons sind bereits zur Laufzeit auf der Form platziert end; das Ereignis ... Button1MouseDown. In diese Ereignis schreiben wir eine einzige Zeile :
Delphi-Quellcode:
damit ist der Sender beim Ereignis Mouse-Down festgelegt.
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin BTN1Sender := Sender; end; Wieder mit allen 6 markierten Buttons erzeugen wir jetzt das Ereignis OnClick:
Delphi-Quellcode:
hier wird per Schleife geprüft, welcher Button gedrückt wurde, das Ergebnis wird im
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer; begin for i := 1 to 6 do if BTN1Sender = BTN1[i] then Edit1.Text := 'Button'+IntToStr(i); // über die Schleife wird jetzt der gedrückte Button gefunden // und im TEdit1 ausgegeben end; Beispiel (siehe Anhang) in einem TEdit ausgegeben. Die Verarbeitung kann z.B. über eine Case-Of-Anweisung umgesetzt werden, da ja jedem OnClick-Ereignis eine Behandlung zugewiesen werden soll. Im Beispiel ist den Buttons noch das PopUpMenue1 zugewiesen, auch hier kann im Ereignis PopUpMenu1Popup auf die Variable BTN1Sender zugegriffen werden, um das PopUp-Menü in Abhängigkeit des gedrückten Buttons zu gestalten - die Schleifenauswertung ist die gleiche. 2) Buttons zur Laufzeit erstellen : wir wollen jetzt 6 weitere Buttons erstellen, die rechts an den vorhandenen Buttons mit einem Abstand von 32 Pixeln angeordnet werden. es beginnt wieder mit der Deklaration der Variablen :
Delphi-Quellcode:
es werden wieder ein Array und eine "Sender"-Variable deklariert. Zusätzlich benötigen wir noch
private
{ Private declarations } BTN2 : array of TButton; // Array für zu erstellende Buttons BTN2Sender : TObject; // Sender der zu erstellenden Buttons BTN2Num : Integer; // Anzahl der zu erstellenden Buttons procedure BTN2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BTN2Click(Sender : TObject); eine Variable (BTN2Num) vom Typ Integer für die Anzahl der zu erzeugenden Buttons und zwei Prozeduren : BTN2MouseDown : Prozedur beim Ereignis OnMosuseDown BTN2Click : Prozedur beim Ereignis OnClick beide Prozeduren müssen beim Erstellen der Buttons zugewiesen werden. Die Erstellung der Buttons : (ich hab' im Beispiel das Ereignis OnClick eines Buttons verwendet)
Delphi-Quellcode:
als erstes muss die Länge des Arrays zugewiesen werden, hier durch die Variable BTN2Num,
procedure TForm1.btnCreateNewButtonsClick(Sender: TObject);
var i : Integer; begin BTN2Num := 6; // Anzahl der buttons bestimmen SetLength(BTN2, 6); // Länge des Arrays setzen for i := 0 to BTN2Num -1 do begin BTN2[i] := TButton.Create(Self); // Button erzeugen with BTN2[i] do begin // hier können alle Eigenschaften und // Ereignisse verarbeitet werden Parent := Form1; // Parent bestimmen Width := 144; // Größe festlegen Height := 25; Top := BTN1[i+1].Top; // Positionieren Left := BTN1[i+1].Left + BTN1[i+1].Width + 32; Caption := 'neuer Button '+IntToStr(i); // beschriften PopUpMenu := PopUpMenu2; // PopUp-Menü zuweisen OnMouseDown := BTN2MouseDown; // OnMouseDown-Ereignis zuweisen OnClick := BTN2Click; // OnClick-Ereignis zuweisen end; end; btnCreateNewButtons.Enabled := False; end; danach wird der Button erzeugt ..Create(Self) im with BTN2[i] do begin .. end - Block werden dem erstellten Button seine Eigenschaften und Ereignis-Behandlungsroutinen zugewiesen. Da die ersten 6 Buttons Bezeichnungsindices von 1 bis 6 haben, und die neu erstellten Buttons Indices von 0 bis 5, muss bei der Positionierung die Variable i um eins erhöht werden : BTN1[i+1].Left .... Im Beispiel wird ein existierendes PopUpMenue (PopupMenu2) zugewiesen, ebenso die Ereignis-Behandlungsroutinen OnMouseDown und OnClick. Die Prozeduren hierfür sehen wie folgt aus :
Delphi-Quellcode:
Die Auswertung der Prozeduren für BTN2[i] gleichen den Prozeduren für die vorhandenen Buttons BTN1[i].
procedure TForm1.BTN2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin BTN2Sender := Sender; // Zuweisung des Senders (Button) end; procedure TForm1.BTN2Click(Sender : TObject); var i : Integer; begin for i := 0 to BTN2Num -1 do if BTN2[i] = BTN2Sender then Edit3.Text := 'Button'+IntToStr(i); end; procedure TForm1.PopupMenu2Popup(Sender: TObject); var i : Integer; begin for i := 0 to BTN2Num -1 do if BTN2Sender = BTN2[i] then Edit4.Text := 'Button'+IntToStr(i); end; Auf diese Weise lassen sich alle von TControl abgeleiteten Elemente per array "verwalten" und auch zur Laufzeit erstellen. Die Buttons dienen hier nur als Beispiel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz