Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Form aus zweiter Unit erstellen. (https://www.delphipraxis.net/208399-form-aus-zweiter-unit-erstellen.html)

Zodi 24. Jul 2021 17:14

Form aus zweiter Unit erstellen.
 
Hi Delphianer ich habe eine form mit einem Knopf der beim Drücken eine neue Form erstellen soll.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Unit2;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 CreateNewForm('Hallo');
end;

end.
Unit 2 zum erzeugen der 2. Form

Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

function CreateNewForm(Message: String) : string;

var
  Form2: TForm2;

implementation

procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Free;
end;


function CreateNewForm(Message: String) : string;

begin

  Form2 := TForm2.Create(application);
  Form2.Show;
  Form2.OnClose := Form2.FormClose; // assign onclick handler
result := '';
end;

end.
irgendwie funktioniert das nicht weis wer was ich falsch mache?


grüsse Zodi

dummzeuch 24. Jul 2021 17:34

AW: Form aus zweiter Unit erstellen.
 
Zitat:

Zitat von Zodi (Beitrag 1492742)
irgendwie funktioniert das nicht weis wer was ich falsch mache?

Meine Glaskugel ist gerade kaputt.

Was genau meinst Du mit "irgendwie funktioniert das nicht"?

Delbor 24. Jul 2021 17:35

AW: Form aus zweiter Unit erstellen.
 
Hi Zodie

Zitat:

Zitat von Zodi (Beitrag 1492742)
Hi Delphianer ich habe eine form mit einem Knopf der beim Drücken eine neue Form erstellen soll.
...
irgendwie funktioniert das nicht weis wer was ich falsch mache?

Was heisst denn "Irgendwie..." ? Welche Fehlermeldung erhälst du?

Gruss
Delbor

Zodi 24. Jul 2021 17:48

AW: Form aus zweiter Unit erstellen.
 
Fehlermeldung ist. "Resource nicht gefunden."

Geplant ist es so das mein programm das eine Konsole App soll bei einem Ereignis eine Form erzeugen

Delbor 24. Jul 2021 18:34

AW: Form aus zweiter Unit erstellen.
 
Hi Zodi

Das ist schon im Ansatz falsch - Ironie der Geschichte: Deine erste Unit ist zwar für eine Formunit fehlerfrei. Aber wenn du eine Konsolenanwendung erstellen willst, völlig falsch.
Ich hab sowas noch nie gemacht (der Ansatz könnte aber interessant sein), aber ich denke, die Konsolen- und die VCL-Anwendung müssen zwei verschiedene Apps sein.

Wenn Delphi mit der Fehlermeldung abbricht: "Resource nicht gefunden." wo steht dann der Cursor?

Gruss
Delbor

mmw 24. Jul 2021 18:42

AW: Form aus zweiter Unit erstellen.
 
hallo,

koennte daran liegen

in unit2

Delphi-Quellcode:
implementation

{$R *.dfm}
einfugen


Gruß

QuickAndDirty 25. Jul 2021 17:33

AW: Form aus zweiter Unit erstellen.
 
Zitat:

Zitat von Zodi (Beitrag 1492745)
Fehlermeldung ist. "Resource nicht gefunden."

Geplant ist es so das mein programm das eine Konsole App soll bei einem Ereignis eine Form erzeugen

Erstelle mal eine "Leere" konsolen Anwendung
und eine Leere Windows Anwendung.
dann schau dir mal die beiden generierten .dpr dateien in einem Texteditor an.

Das dürfte dir die Schwierigkeit deines Ansatzes erklären.
Formulare brauchen eine message loop. Diese Loop liefert Application.run;

Sinspin 26. Jul 2021 12:16

AW: Form aus zweiter Unit erstellen.
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1492793)
dann schau dir mal die beiden generierten .dpr dateien in einem Texteditor an.

Dazu braucht man aber keinen Texteditor, das geht in Delphi. -> Menue/Project/"Quelltext anzeigen".

Ich kenne einige Programme die ein Konsolenfenster haben und trotzdem eine normale Programmoberfläche. Das bekannteste ist wohl Blender.
Die einzige Frage die sich mir stellt ist, was passiert wenn man ein Application object erstellt und das Hauptform erzeugt, ob das den Consolenoutput zerhaut.
Aber probieren geht über studieren!

himitsu 26. Jul 2021 12:55

AW: Form aus zweiter Unit erstellen.
 
Ja, aber dennoch ist das nötig, was genannt wurde :!:

* VCL-Anwendung erstellen und {$APPTYPE CONSOLE} in die DPR
* VCL-Anwendung erstellen und Bei Google suchenAllocConsole/AttachConsole/FreeConsole
* VCL-Anwendung erstellen und ein eigenes console-ähnliches VCL-Fenster bauen (z.B. mit einem Memo drin)
* Konsole-Anwendung erstellen, aber für die VCL "manuell" regelmäßig die Messages behandeln


https://www.delphipraxis.net/103940-...v2-0-15-a.html
hier hatte ich mal mit AllocConsole/AttachConsole rumgespielt

Delbor 26. Jul 2021 13:06

AW: Form aus zweiter Unit erstellen.
 
Hi Sinspin

Zitat:

Zitat von Sinspin (Beitrag 1492815)
Ich kenne einige Programme die ein Konsolenfenster haben und trotzdem eine normale Programmoberfläche. Das bekannteste ist wohl Blender.

Mein erster Gedanke war: Blender ist wohl kaum in Delphi programmiert. Abgesehen davon, dass teile eventuell doch mit Delphi erstellt wurden (DLG): Was hindert ein Delphi-VCL-Programm (oder FMX) daran, einen Prozess zu starten? Ob der nun in einer Konsole läuft oder als VCL/FMX-Anwendung, dürfte schon mal egal sein.

Zitat:

Zitat von Sinspin (Beitrag 1492815)
Die einzige Frage die sich mir stellt ist, was passiert wenn man ein Application object erstellt und das Hauptform erzeugt, ob das den Consolenoutput zerhaut.
Aber probieren geht über studieren!

Oder auch anders: was nicht wirklich läuft, kann nichts schreddern. Und ob wirklich beides in ein und demselben Prozess laufen kann, bezweifle ich stark.
Inzwischen hab ich himitsus Beitrag gesehen, und da wurde ja offensichtlich das Gegenteil bewiesen.

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Seite 1 von 2  1 2      

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