Es gibt Situationen, da benötigt man mehrere identische Eingabeformulare, zum Beispiel auf TabSheets, wie hier zu sehen ist:
Ich habe mich hingesetzt und probiert, wie man so etwas am einfachsten bewerkstelligen kann und kam zu dem Ergebnis, das TFrames dafür ideal sind. Damit geht es ohne größeren Programmieraufwand.
Im Programm kann man in verschiedene Register zum Beispiel Namen hineinschreiben und diese dann auslesen. Die Namen schreibt man in ein TEdit, das über ein Frame auf jedes TabSheet gesetzt wird. Möchte man diese Eingabemaske bearbeiten, so genügt es, das Frame zu ändern, dann wird dies für jedes TabSheet übernommen.
Um ein Frame zu erstellen wählt man aus dem Menü
Datei -->
Neu -->
Frame.
Folgendes bekommt man dann zu Gesicht:
Es ist quasi ein Formular, auf dem man natürlich nach Belieben Komponenten platzieren kann. Wir bestücken das Frame so:
Dann ziehen wir noch ein TPageControl (Register:
Win32) aufs Formular, auf dem nachher die TabSheets angezeigt werden.
Nun zum eigentlichen Programmieren:
Das Frame müssen wir nun erst einmal in das Formular einbinden, was mittels
Delphi-Quellcode:
implementation
{$R *.dfm}
//Frame einbinden
uses Unit2;
geschieht.
Dann erzeugen wir zur Laufzeit die TabSheets, die Frames für die einzelnen TabSheets und Labels zur Ausgabe des Namens. Dazu müssen wir die entsprechenden Variablen deklarieren. Ich habe sie global deklariert, dann kann man später von anderen Formularen einfach darauf zugreifen, aber es geht natürlich genauso lokal:
Delphi-Quellcode:
var
MyTabSheet: TTabSheet;
MyFrame: TFrame;
MyLabel: TLabel;
In unserem Beispiel erstellen wir 4 TabSheets mit den dazugehörigen Frames und Ausgabelabels:
Delphi-Quellcode:
var
i: integer;
begin
for i := 1 to 4 do
begin
//TabSheets anlegen
MyTabSheet := TTabSheet.Create(PageControl1);
MyTabSheet.PageControl := PageControl1;
MyTabSheet.Name := 'MyTab_' + IntToStr(i);
MyTabSheet.Caption := 'Register Nr. ' + IntToStr(i);
MyTabSheet.Show;
//Frames drauf positionieren
MyFrame := TFrame2.Create(Self);
MyFrame.Name := 'MyFrame_' + IntToStr(i);
MyFrame.Parent := MyTabSheet;
MyFrame.Show;
end;
end;
Nun erhält man 4 TabSheets mit jeweils einem Eingabeformular darauf. Um die eingetragenen Namen der einzelnen TabSheets auszulesen, geht man folgendermaßen vor:
Delphi-Quellcode:
var
FrameText: string;
i: integer;
begin
for i := 1 to 4 do
begin
//Labels zur Ausgabe der Namen erstellen
MyLabel := TLabel.Create(Form1);
MyLabel.Name := 'MyLabel_' + IntToStr(i);
MyLabel.Parent := Form1;
MyLabel.Left := 10;
MyLabel.Top := 220 + (MyLabel.Height + 10) * i;
MyLabel.Show;
//Den Text (Name) der einzelnen Frameszwischenspeichern ...
FrameText := (FindComponent('MyFrame_' + IntToStr(i)) as TFrame2).Edit1.Text;
//...und ausgeben
(FindComponent('MyLabel_' + IntToStr(i)) as TLabel).Caption := FrameText;
end;
end;
Nicht vergessen, am Ende wieder die erzeugten Objekte freizugeben:
Delphi-Quellcode:
//Objekte freigeben
procedure TForm1.FormDestroy(Sender: TObject);
var
i: integer;
begin
for i := 1 to 4 do
begin
(FindComponent('MyFrame_' + IntToStr(i)) as TFrame2).Free;
(FindComponent('MyLabel_' + IntToStr(i)) as TLabel).Free;
(FindComponent('MyTabSheet_' + IntToStr(i)) as TTabSheet).Free;
end;
end;
Hinweis:
Mit Frames hat man die gleiche Unterstützung durch die
IDE wie es bei Forms der Fall ist.
Das heißt: Man kann sie fröhlich von einander ableiten, um zum Beispiel eine gewisse Funktionalität oder ein Layout in allen Ableitungen verwenden zu können.
Dazu geht man auf
Datei -->
Neu -->
Weitere --> Projektname und Frame auswählen
Mein Dank für diesen Hinweis geht an Robert_G.
So, das war's schon, viel Spaß beim Ausprobieren.