AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Controls per arrays verwalten und / oder erstellen
Tutorial durchsuchen
Ansicht
Themen-Optionen

Controls per arrays verwalten und / oder erstellen

Ein Tutorial von markus5766h · begonnen am 2. Feb 2010
Antwort Antwort
Benutzerbild von markus5766h
markus5766h
Registriert seit: 5. Mär 2009
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:
private
    { Private declarations }
    BTN1 : array[1..6] of TButton; // Array für bereits vorhandene Buttons
    BTN1Sender : TObject; // Sender der Buttons im array BTN1
damit wir später auch wissen, welcher Button des Arrays gedrückt wurde,
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:
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;
jetzt markieren wir alle 6 Buttons und erzeugen per Doppel-Click im Object-Inspector
das Ereignis ... Button1MouseDown. In diese Ereignis schreiben wir eine einzige Zeile :
Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 BTN1Sender := Sender;
end;
damit ist der Sender beim Ereignis Mouse-Down festgelegt.
Wieder mit allen 6 markierten Buttons erzeugen wir jetzt das Ereignis OnClick:
Delphi-Quellcode:
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;
hier wird per Schleife geprüft, welcher Button gedrückt wurde, das Ergebnis wird im
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:
 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);
es werden wieder ein Array und eine "Sender"-Variable deklariert. Zusätzlich benötigen wir noch
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:
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;
als erstes muss die Länge des Arrays zugewiesen werden, hier durch die Variable BTN2Num,
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:
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;
Die Auswertung der Prozeduren für BTN2[i] gleichen den Prozeduren für die vorhandenen Buttons BTN1[i].
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.
Angehängte Dateien
Dateityp: rar tut_306.rar (161,3 KB, 27x aufgerufen)
 
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz