Viele Programme verwenden neben dem Hauptformular und den Standarddialogen weitere Formulare zur Anzeige und Eingabe von Daten.
Beispiel:
Ein Programm besteht aus dem Formular Form1 mit den beiden Unit-Dateien Unit1.cpp und Unit1.h enthält. Durch das Anklicken des Buttons ein ein weiteres Formular angezeigt werden.
Einem Projekt kann man mit Datei|Neu|Formular - C Builder ein weiteres Formular hinzufügen. Dieses Formular kann man dann wie alle bisherigen Formulare mit Komponenten aus der Tool-Palette gestalten.
In diesem Beispiel soll das neue Formular Form2 heißen und die zugehörigen Dateien Unit2.cpp und Unit2.h. Auf dieses Formular soll ein Eingabefeld Edit1, ein OK-Button und ein Abbrechen-Button hinzugefügt werden:
Damit man in einer Funktion des einen Formulars (z.B. Form1) auf die Elemente eines anderen Formulars (z.B. Form2) zugreifen kann, muss man die Header-Datei des verwendeten Formulars (hier Unit2.h) mit einer #include-Anweisung in die Unit des aufrufenden Formulars (hier Unit1.cpp) aufnehmen. Diese #include-Anweisung kann man entweder manuell eintragen oder mit Datei|Unit verwenden vom C-Builder eintragen lassen. Nach diesen Vorbereitungen kann ein Formular durch einen Aufruf der Methoden Show und ShowModal angezeigt werden:
Diese beiden Methoden unterscheiden sich vor allem durch den Zeitpunkt, zu dem die im Quelltext auf ihren Aufruf folgende Anweisung ausgeführt wird. Bei Show wird sie unmittelbar anschließend ausgeführt, ohne auf das Schließen des Fensters zu warten. Bei ShowModal wird sie dagegen erst nach dem Schließen des Fensters ausgeführt. Damit ein anderes Fenster der Anwendung aktiviert werden kann, muss zuerst das mit ShowModal angezeigte Fenster geschlossen werden.
Ein mit ShowModal angezeigtes Formular wird als modales Fenster, modaler Dialog oder als modales Dialogfeld bezeichnet. ShowModal wird vor allem dann verwendet, wenn man Daten aus dem Fenster in die Anwendung übernehmen will.
Falls man nur Daten anzeigen will, kann man auch Show verwenden.
Ein modales Fenster wird durch eine Zuweisung eines von Null verschiedenen Wertes an die Eigenschaft ModalResult geschlossen. Dieser Wert ist dann der Funktionswert von ShowModal. Über diesen Rückgabewert informiert man den Aufrufer, mit welchem Button ein modales Formular geschlossen wurde. Der C-Builder sieht dafür Werte wie mrCancel, mrOk usw. vor. Wenn ein modales Fenster mit der Schließen-Schaltfläche x geschlossen wird, erhält ModalResult den Wert mrCancel.
Beispiel: Wenn das modale Fenster Form2 zwei Buttons Abbrechen und OK hat, mit denen man es schließen kann, weist man ModalResult beim Anklicken dieser Buttons zwei verschiedene Werte zu, die nicht Null sind.
void __fastcall TForm2::AbbrechenClick(TObject *Sender) {ModalResult = mrCancel; } void __fastcall TForm2::OKClick(TObject *Sender) {ModalResult = mrOk; }
Im aufrufenden Formular kann man über den Rückgabewert von ShowModal abfragen, mit welchem Button das Formular geschlossen wurde. Normalerweise führt man nur als Reaktion auf das Anklicken des OK-Buttons irgendwelche Anweisungen aus. In der folgenden Abbildung sieht man außerdem die oben beschriebene #include-Anweisung:
Diese Vorgehensweise lässt sich weiter vereinfachen, indem man der Eigenschaft ModalResult (z.B. im Objektinspektor) der Schließen-Buttons einen Wert zuweist. Dann wird beim Anklicken der Buttons dieser Wert der Eigenschaft ModalResult des Formulars zugewiesen. So kann man sich die Ereignisbehandlungsroutinen AbbrechenClick und OKClick sparen.
Der C-Builder erzeugt in der CPP-Datei des Projekts für alle dem Projekt hinzugefügten Formulare Anweisungen, durch die alle diese Formulare beim Start des Programms erzeugt werden:
Deshalb wirkt sich ein Aufruf von Show bzw. ShowModal oder das Schließen eines Formulars nur auf die Anzeige aus. Sie hat keinen Einfluss darauf, ob ein Formular und seine Daten geladen sind (und damit Speicherplatz belegen) oder nicht. Deshalb kann man die Daten eines geschlossenen Formulars wie in der Abbildung des letzten Beispiels ansprechen.
Bei Dialogfeldern werden oft auch noch die folgenden Eigenschaften gesetzt:
Default auf true gesetzt. Dann hat ein Drücken der Enter-Taste denselben Effekt wie das Anklicken dieses Buttons.Cancel auf true gesetzt. Dann hat ein Drücken der ESC-Taste denselben Effekt wie das Anklicken dieses Buttons.BorderStyle auf bsDialog gesetzt. Dann kann man die Größe des Fensters nicht verändern.