Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Formular ohne VCL (https://www.delphipraxis.net/162995-formular-ohne-vcl.html)

FriendOfDelphi 12. Sep 2011 12:20

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:
MeinFenster := TForm.Create(???);
Aber was muss an die Stelle der Fragezeichen?
Ist der Owner das erste Formular?

Vielen Dank

Medium 12. Sep 2011 12:23

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!

Sir Rufo 12. Sep 2011 12:24

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:
Nil
an, ansonsten halt den Owner (kann ja auch
Delphi-Quellcode:
Application
sein) an, der sich um die Freigabe kümmern soll.

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;

FriendOfDelphi 12. Sep 2011 12:40

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.

Medium 12. Sep 2011 12:45

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.

Neutral General 12. Sep 2011 12:45

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 MSDN-Library durchsuchenCreateWindow oder MSDN-Library durchsuchenCreateWindowEx.

FriendOfDelphi 12. Sep 2011 12:54

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?

stahli 12. Sep 2011 13:33

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.

Union 12. Sep 2011 14:22

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.

FriendOfDelphi 12. Sep 2011 14:25

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:
//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;
  [...]
Habt ihr eine Idee, was ich falsch mache?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Seite 1 von 3  1 23      

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