====== Anzeige weiterer Formulare ====== 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. {{:informatik:programmierung:bck-1023.jpg|Form1}} 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: {{:informatik:programmierung:bck-1024.jpg|Form2}} 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: * void Show(); * virtual int ShowModal(); 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: {{:informatik:programmierung:bck-1025.jpg|Form2}} 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: {{:informatik:programmierung:bck-1026.jpg|Form2}} 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: * Beim OK-Button wird die Eigenschaft ''Default'' auf ''true'' gesetzt. Dann hat ein Drücken der Enter-Taste denselben Effekt wie das Anklicken dieses Buttons. * Beim Abbrechen-Button wird die Eigenschaft ''Cancel'' auf ''true'' gesetzt. Dann hat ein Drücken der ESC-Taste denselben Effekt wie das Anklicken dieses Buttons. * Beim Formular wird die Eigenschaft ''BorderStyle'' auf ''bsDialog'' gesetzt. Dann kann man die Größe des Fensters nicht verändern.