Delphi-Version: 5
Formular ohne VCL
Hallo Allerseits,
wie kann ich in einem Delphi-Programm ein 2. Fenster ohne die VCL erstellen? Das Formular erstelle ich mit:
Delphi-Quellcode:
Aber was muss an die Stelle der Fragezeichen?
MeinFenster := TForm.Create(???);
Ist der Owner das erste Formular? Vielen Dank |
AW: Formular ohne VCL
TForm ist Teil der VCL. Zu non-VCL gibt es hier in der DP eine Menge Lesestoff, insbesondere Artikel von Luckie!
|
AW: Formular ohne VCL
Wo machst du denn da was ohne VCL?
AnyWay ... als Parameter wird da der Owner erwartet. Der Owner kümmert sich darum, dass die erzeugte Instanz wieder aus dem Speicher fliegt. Wenn du dich darum selber kümmerst, dann gib als Parameter einfach
Delphi-Quellcode:
an, ansonsten halt den Owner (kann ja auch
Nil
Delphi-Quellcode:
sein) an, der sich um die Freigabe kümmern soll.
Application
Delphi-Quellcode:
var
MyForm : TForm; begin // Selber kümmern MyForm := TForm.Create( nil ); try MyForm.ShowModal; finally MyForm.Free; end; // oder // Application kümmert sich drum MyForm := TForm.Create( Application ); MyForm.Show; end; |
AW: Formular ohne VCL
Ich habe ein Fenster ganz normal mit der VCL erstellt. Das Hauptfenster. Will ich auch erst einmal so lassen.
Innerhalb des Create des Hauptfensters möchte ich ein 2. Fenster selbst erstellen, dass ich bei Bedarf ein- oder ausschalte und in dem ich zur Laufzeit erzeugte Komponenten anzeigen möchte. Eigentlich läuft das auch schon alles, solange ich die zur Laufzeit erzeugten Komponenten im Hauptfenster (1. Fenster) anzeige. Dort übergebe ich AOwner und Parent vom Hauptfenster. Nun möchte ich das Ganze so ändern, dass die zur Laufzeit erzeugten Komponenten alle in einem zusätzlichen, eigenen Fenster dargestellt werden, dass sich auf Knopfdruck öffnet. Der Knopfdruck ist nicht so wichtig. Könnte auch gleich da sein. |
AW: Formular ohne VCL
Dafür würde es doch reichen, einfach ein zweites, leeres Fenster zu erstellen, und dies den dynamischen Komponenten als Parent zu geben. Dann bei Bedarf via Show() einblenden.
Du willst übrigens sehr wohl mit der VCL arbeiten: Die VCL ist die Standard-Klassenbibliothek in Delphi, zu der u.a. auch TForm gehört. Was du meinst, ist der Form-Designer. Dieser ist zwar nicht ohne die VCL nutzbar, die VCL ohne den Designer aber sehr wohl - und das würdest du im Wesentlichen dann tun. |
AW: Formular ohne VCL
PS: VCL ist nicht der Editor mit dem du dein Formular und deine Oberfläche zusammenklickst.
VCL ist die Bezeichnung einer Bibliothek aller visuellen Komponenten/Controls die Delphi dir zur Verfügung stellt. Non-VCL bedeutet du erstellt alle Fenster, Buttons usw. mit CreateWindow oder CreateWindowEx. |
AW: Formular ohne VCL
Ja, dass stimmt.
Ist es denn sehr viel schwieriger, wenn man das 2. Fenster auch zur Laufzeit erstellen will? Ich dachte, dass das vielleicht nur ein kleine Erweiterung des bisherigen was ich habe darstellt (mit den Komponenten habe ich das ganz gut hinbekommen). Also komme ich um ein vorher mit dem Form-Designer erstelltes leeres Fenster nicht drumherum? |
AW: Formular ohne VCL
Irgendwie denkst Du zu kompiziert.
Sir Rufo hat in #3 geschrieben, wie Du es lösen kannst. Einfach zur Laufzeit eine Formularinstanz erzeugen und einer Variablen zuweisen. Dann kannst Du darauf Deine Controls seztzen und das Formular anzeigen. Alternativ kannst Du das Formular auch schon zur Designzeit definieren. Dann kannst Du automatisch damit arbeiten. Im Ergebnis kommt das nahezug auf das gleiche raus. Mein Tipp: Dynamisch würde ich Formulare eigentlich nur erzeugen, wenn ich nicht weiß, wie viele solcher Formulare ich dann zur Laufzeit brauche oder wenn ich jedes Byte unnötigen Speicherplatz vermeiden will. |
AW: Formular ohne VCL
Vielleicht will er nur nicht dass das Formular automatisch von Delphi erzeugt wird, sondern dies (z.b. wg. Ressourcen) selber tun will. Also unter Projektoptionen aus der "automatisch erzeugen" Liste entfernen und dann wenn benötig mit Create erzeugen und mit Show anzeigen.
|
AW: Formular ohne VCL
Ich habe es so ausprobiert, wie es "Sir Rufo" beschrieben hat.
Das Problem ist nur, dass zwar ein zweites Fenster angezeigt wird, aber die Komponenten, die ich darin erzeuge nicht. Das Fenster ist leer. Die Komponentenerstellung zur Laufzeit funktionierte ja vorher für das 1., bzw. Hauptfenster. Wahrscheinlich mache ich etwas mit dem Owner falsch. Der Compiler meckert aber nichts an. Könnt ihr nochmal schauen:
Delphi-Quellcode:
Habt ihr eine Idee, was ich falsch mache?
//Formular mache ich wie von "Sir Rufo" beschrieben.
MyForm := TForm.Create( Application ); //Dann erstelle ich die Komponenten: MyScrollBox[0]:=TScrollBox.Create(MyForm.Owner); MyScrollBox[0].Parent:=MyForm.Parent; [...] MyGroupBox:=TGroupBox.Create(MyForm.Owner); MyGroupBox.Parent:=MyScrollBox[0]; [...] MyLabel[FiIndexLabel]:=TLabel.Create(MyForm.Owner); MyEdit[FiIndexEdit]:=TEdit.Create(MyForm.Owner); [...] MyLabel[FiIndexLabel].parent := MyGroupBox; MyEdit[FiIndexEdit].parent := MyGroupBox; [...] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz