Upline: Infos & Dokus Programmierung Delphi

Delphi HowTo Teil 3 Formular-Spielereien


Programm mit mehreren Formularen

Für viele Anwendungen ist es notwendig, mehr als nur ein Formular zur Verfügung zu haben. Das Anlegen eines zusätzlichen Formulars geht einfach über das Menü unter Datei -> Neues Formular. Um nach dem Programmstart auch irgendwie auf das 2. Formular zugreifen zu können, muss dieses irgendwie angezeigt werden können. Hierfür legt man z.B. einen Button auf das Form1, doppelklickt darauf und trägt in der erzeugten Prozedur folgenden Quelltext ein:
Form2.Show;
Um ein Fenster wieder schließen zu können, bindet man an entsprechender Stelle den Befehl close; ein. Verwendet man diese Funktion im Hauptformular, so werden automatisch auch gleich alle Unterfenster geschlossen. Bei close handelt es sich um eine Funktion der Forms-Klasse, man kann also auch mit Form2.Close; etc. ein Formular gezielt von einem anderen aus schließen. Nach dem Start des Programms wird man gefragt, ob das Form2 in die Uses-Liste von Form1 ergänzt werden soll. Nach der Bestätigung mit "Ja" wird diese Aufgabe erledigt und mit einem weiteren Klick auf den Start-Button kann man bereits dieses einfache Beispiel ausprobieren.


Im folgenden beschreibe ich kurz ein Beispielprogramm, welches mit drei Formularen arbeitet und verschiedene häufig benötigte Objekte verwendet. Dieses Beispielprogramm hat lediglich den Sinn, einige Möglichkeiten darzustellen, die einem mit Delphi gegeben sind. Einige der sich gegenseitig ändernden Objekte sind nicht komplett entwickelt, um den Sourcecode nicht zu sehr aufzublähen. Dadurch sind einige "Merkwürdigkeiten" im Programmablauf erkennbar, die zu Übungszwecken vom interessierten Leser relativ problemlos bereinigt werden können. In der Beschreibung gehe ich nicht weiter auf Farbänderungen, Fonts oder ähnlich triviale Dinge ein.

Hauptformular

Auf dem Hauptformular befinden sich 3 BitButtons, 2 davon mit kleinem Bildchen. Diese Bilder bindet man in der BitButton-Eigenschaft unter Glyph ein. Diese beiden öffnen 2 zusätzliche Formulare, wie habe ich oben bereits erklärt. Der 3. BitButton schließt einfach nur das Hauptformular, dafür würde allerdings auch ein normaler Button reichen, da kein Bild eingebunden wurde. Quelltext:
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
 Close
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Form2.Show
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 Form3.Show
end;

Das 2. Formular

Ganz sparsam gestaltet gibt es auf dem 2. Formular nur 2 Labels, eines davon kunterbunt gestaltet. Dazu ist noch ein SpeedButton auf dem Form2 platziert, welcher wie die BitButtons eine Eigenschaft Glyph besitzt. SpeedButtons werden hauptsächlich als Minischaltflächen, wie man sie aus ButtonBars kennt, verwendet. Es kann jedoch zusätzlich auch ein Text angezeigt werden. Da der Quelltext dieser Unit wirklich sehr kurz ist, lasse ich ihn weg.

Das 3. Formular mit Karteikarten, Radiobuttons etc.

Im Hintergrund des Formulars liegt eine Image-Komponente, darauf ein TabbedNotebook (Karteikartenobjekt), eine RadioGroup und eine GroupBox. Im TabbedNotebook findet man im Beispiel mehrere, zumeist leere Karteikarten. Diese sind über die Eigenschaft ActivePage auswählbar, so dass man jede einzelne Karte nach Belieben gestalten kann. Für kleine Tools ist stellt dies eine interessante Alternative zur Nutzung mehrerer Formulare dar.
Die RadioGroup enthält zwar RadioButtons - allerdings sind diese nicht wie üblich integriert. Die RadioButtons einer RadioGroup werden in Delphi normaler Weise in der Eigenschaft Items definiert. Jede dort eingetragene Zeile steht anschließend für einen RadioButton, über die Eigenschaft ItemIndex wird festgelegt, welcher RadioButton bei Programmstart aktiviert ist. Darüber läßt sich im Nachhinein sowohl die Auswahl ändern, als auch abfragen. Da dieses Beispielprogramm jedoch nicht mit der über die RadioGroup verfügbare Funktionalität arbeitet, hätte in diesem Fall genauso gut auch eine einfache GroupBox verwendet werden können. Die 7 sichtbaren RadioButtons sind einzeln auf die RadioGroup gelegt worden und unterliegen somit anderen Eigenschaften. So müssen diese z.B. alle einzeln verarbeitet werden, da sie ja nicht über eine übergeordnete Eigenschaft wie ItemIndex verfügen. Um weitere Besonderheiten dieser Art der RadioButton-Verwendung kennenzulernen, empfiehlt es sich, mit diesen RadioButtons zu experimentieren. Der ebenfalls innerhalb der RadioGroup liegende BitButton führt lediglich ein close des Formulars aus und setzt somit wieder das Hauptformular in den Vordergrund. Unterhalb der RadioGroup ist eine GroupBox mit 10 CheckBoxen angeordnet. Mit Hilfe der CheckBoxen lassen sich innerhalb des TabbedNotebook Eigenschaften ändern. Die RadioButtons und das TabbedNotebook beeinflussen sich gegenseitig.
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
 Close
end;
procedure TForm3.RadioButton1Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 1'
end;
procedure TForm3.RadioButton2Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 2'
end;
procedure TForm3.RadioButton3Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 3'
end;
procedure TForm3.RadioButton4Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 4'
end;
procedure TForm3.RadioButton5Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 5'
end;
procedure TForm3.RadioButton6Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 6'
end;
procedure TForm3.RadioButton7Click(Sender: TObject);
begin
 TabbedNotebook1.ActivePage:='Kartei 7'
end;

procedure TForm3.TabbedNotebook1Click(Sender: TObject);
begin
 if TabbedNotebook1.ActivePage='Kartei 1'then RadioButton1.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 2'then RadioButton2.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 3'then RadioButton3.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 4'then RadioButton4.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 5'then RadioButton5.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 6'then RadioButton6.Checked:=true;
 if TabbedNotebook1.ActivePage='Kartei 7'then RadioButton7.Checked:=true;
end;

procedure TForm3.CheckBox1Click(Sender: TObject);
begin
 with TabbedNotebook1.Font do begin
  TabbedNotebook1.Font.Color:=clWindowText;
  Size:=8;
  Name:='MS Sans Serif';
 end;
end;

procedure TForm3.CheckBox2Click(Sender: TObject);
begin
 with TabbedNotebook1.Font do begin
  Color:=clblue;
  Size:=12;
  Name:='Comic Sans MS';
 end;
end;

Download

Der Sourcecode zu diesem Beispiel, dem 3. Teil der Delphi HowTo.