Ich arbeite mit Delphi 7 und versuche, ein Formular programmgesteuert zu erstellen. Hier ist mein Formularklassen-Stub:
%Vor%Ich habe auch eine Schaltfläche auf meinem Hauptformular (das ist nur ein normales Formular, das das Formular oben zur Laufzeit erstellen und anzeigen soll) und wenn es angeklickt wird, erstellt und zeigt das Schülerformular als modales Fenster. Es zeigt die Form, aber es gibt nichts darauf. Das einzige, was Sie tun können, ist die Schließen-Schaltfläche in der oberen rechten Ecke des Fensters, um es zu schließen.
%Vor%
Ich habe keine Ahnung, wie man Komponenten zu einem programmatisch erzeugten Formular hinzufügt (nicht zur Laufzeit, sondern zum Quellcode). Können Sie mir helfen, einen Code zu schreiben, der dem Schülerformular eine Okay-Schaltfläche hinzufügt, sowie die Beschriftung und die Höhe und Breite des Formulars (der Code muss in die Schülerformulardatei geschrieben werden)?
Alle Vorschläge und Beispiele werden sehr geschätzt. Danke.
Standardmäßig (dh mit allen Standard-IDE-Konfigurationseinstellungen) werden neu gestaltete Formulare automatisch erstellt. Nur das Hauptformular wird angezeigt, und sekundäre Formulare können angezeigt werden mit:
%Vor%Es ist üblich, diese automatische Erstellung zu deaktivieren. Gehe zu: Werkzeuge & gt; (Umgebung) Optionen & gt; (VCL) Designer & gt; Optionen zum Erstellen von Modulen und Deaktivieren / Deaktivieren der Automatisches Erstellen von Formularen & amp; Datenmodule Option.
Erstellen Sie stattdessen ein (bereits entworfenes) Formular nur dann, wenn es benötigt wird:
%Vor%Dies zeigt auch, dass die globalen Variablen für die sekundären Formen nicht benötigt werden, und es ist gute Praxis, diese so schnell wie möglich zu löschen, um eine falsche Verwendung zu verhindern:
%Vor%Wenn Sie diese sekundäre Form nicht mit dem Formular-Designer einrichten möchten, müssen Sie zur Laufzeit alle Steuerelemente in Code erstellen. Wie folgt:
%Vor% Wie Sie sehen, habe ich den Konstruktor CreateNew
verwendet. Dies ist notwendig für T(Custom)Form
derivatives:
Verwenden Sie
CreateNew
anstelle vonCreate
, um ein Formular zu erstellen, ohne die zugehörige .DFM-Datei zu verwenden, um es zu initialisieren. Verwenden Sie immerCreateNew
, wenn der NachkommeTCustomForm
keinTForm
-Objekt oder ein Nachkomme vonTForm
ist.
Für alle anderen Container-Steuerelemente (wie TPanel
, TFrame
usw.) können Sie den Standardkonstruktor Create
außer Kraft setzen.
Rufen Sie dieses Formular wie folgt auf:
%Vor%Oder:
%Vor% In diesem letzten Fall wird das Formular nicht freigegeben, sondern ausgeblendet, wenn es geschlossen ist. Sie müssen daher seine Referenz in einem privaten Feld ( FForm
) speichern und später freigeben. Oder Sie können es automatisch tun:
Nun könnten Sie es aufrufen, ohne eine Referenz zu speichern:
%Vor% Ob Sie übergeben, Self
, Application
oder nil
als Eigentümer für das neue Formular hängt davon ab, wann Sie es automatisch vernichten wollen, falls Sie es nicht manuell oder über das OnClose
-Ereignis freigeben. Verwenden Sie
Self
: zerstört das neue Formular, wenn das aufrufende Formular zerstört wird. Dies ist besonders nützlich, wenn das aufrufende Formular nicht das Hauptformular ist. Application
: zerstört das neue Formular, wenn die Anwendung beendet wird. Dies wäre meine bevorzugte Wahl. nil
: zerstört das neue Formular nicht und führt zu einem Speicherverlust beim Beenden der Anwendung. Allerdings wird der Speicher letztendlich freigegeben, wenn Windows den Prozess beendet. Das Erstellen modaler Formulare mit Steuerelementen im laufenden Betrieb ist einfach:
%Vor%