Sign in Join
Wiki copytemporary

Dynamic form components creation in Lazarus/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Dynamic form components creation in Lazarus/de

OldNewLine
1+# Dynamisch Komponenten in eime Form erzeugen
2+
3+Zum einen kann man ganz einfach über den Objektinspektor einen [[TButton/de|Button]] erstellen sowie Ereignisse für diesen registrieren (natürlich gehen auch andere Objekte).\
4+Das hat seine Vor- und Nachteile. Wenn man nur einen Button braucht, kann man den lieber über den Objektinspektor auf die Form ziehen und fertig (siehe dazu auch [[Form Tutorial/de|Tutorial für Formulare]]).\
5+Wenig Tipparbeit und schnell getan. Dann noch eben die gewünschten Eigenschaften ändern und fertig. Anders ist das, wenn man z.B. je nach Umständen verschiedene Buttons an unterschiedlichen Stellen haben möchte.\
6+Dann wird die Form sehr schnell unübersichtlich. Also brauchen wir eine alternative Lösung. Diese besteht darin, die Buttons (aber auch beliebige andere Objekte) mit ein paar Zeilen Quellcode zu erstellen. Ein kleines Beispiel ist hier zu sehen:
7+
8+``` pascal
9+unit Unit1;
10+// Quellcode von carli | carli - lazarusforum.de
11+// Kommentare von Sven | Bauer321 - lazarusforum.de
12+
13+{$mode objfpc}{$H+}
14+
15+interface
16+
17+uses
18+ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
19+
20+type
21+
22+ { TForm1 }
23+
24+ TForm1 = class(TForm)
25+ procedure FormCreate(Sender: TObject);
26+ procedure ButtonClick(Sender: TObject);
27+ private
28+ { private declarations }
29+ public
30+ { public declarations }
31+ end;
32+
33+var
34+ Form1: TForm1;
35+
36+implementation
37+
38+{$R *.lfm}
39+
40+{ TForm1 }
41+
42+procedure TForm1.FormCreate(Sender: TObject);
43+var
44+ ed: TEdit; // eine Variable vom Typ TEdit
45+ but: TButton; // eine Variable vom Typ TButton
46+begin
47+ ed := TEdit.Create(self); // Das Edit erstellen
48+ ed.Parent := self; // Die aktuelle Form als Parent Form registrieren
49+ ed.top := 8; // Abstand oben für das Edit festlegen
50+ ed.Left := 10; // Abstand links für das Edit festlegen
51+ ed.Width := ClientWidth - 2 * ed.left; // Breite für das Edit festlegen
52+ ed.text := 'Bitte geben sie den Text ein'; // einen Text in das Edit-Feld schreiben
53+
54+ but := TButton.Create(self);
55+ but.parent := self; // Die aktuelle Form als Parent Form registrieren
56+ but.top := ed.Top + ed.Height; // Abstand oben für das Button festlegen
57+ but.left := ed.Left; // Abstand links für das Button festlegen
58+ but.Caption := 'Klickmich'; // Caption für den Button festlegen
59+ but.OnClick := @ButtonClick; // event Hinzufügen, in diesem Fall soll die Prozedur ButtonClick ausgerufen werden, wenn das OnClick Ereignis ausgelöst wird.
60+end;
61+
62+// Prozedur "ButtonClick", die durch den Button, der unter der Variable "but" definiert ist, aufgerufen wird
63+procedure TForm1.ButtonClick(Sender: TObject);
64+begin
65+ ShowMessage('Hallo Welt');
66+end;
67+
68+end.
69+```
70+
71+Wie man sieht, wird dort ein Button unter der Variable "but" und ein Edit unter der Variable "ed" erstellt. Wenn man jetzt auf diese Objekte zugreifen will, muss man einfach nur die Variable "but" bzw. "ed" nutzen. Außerdem lassen sich Arrays nutzen. Bei vielen Feldern hat das den Vorteil, dass man sie einfach mit for-to-do Schleifen mit sehr wenig Quellcode auslesen bzw. ändern kann.\
72+Beispiel mit zwei Arrays:
73+
74+- [Komponenten-in-Lazarus-dynamisch-erstellen-Beispiel.zip, 21.06.11](http://sourceforge.net/projects/lazarusbeispiel/files/Komponenten-in-Lazarus-dynamisch-erstellen-Beispiel.zip/download)
75+
76+Für's Erste soll's das sein. Mal gucken, ob ich das irgendwann nochmal erweitere oder nicht. Bei Fehlern oder optimierten Dingen einfach ausbessern ... --Sven 22:00, 20 June 2011 (CEST)
77+
78+---
79+*From the Free Pascal wiki, page "Dynamic form components creation in Lazarus/de", as it stood on 2020-01-17 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
80+Category: Forms/de

Back to history