Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TForm1.FormCreate -> Form2.Show; (https://www.delphipraxis.net/27516-tform1-formcreate-form2-show%3B.html)

StanY 11. Aug 2004 13:56


TForm1.FormCreate -> Form2.Show;
 
Ich hoffe mal, dass das hier die richtige Kategorie ist...

Warum geht das hier nicht? ^^

Unit1:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2.Show;
end;
Ich bekomme eine Fehlermeldung; Programm wird nicht compiliert und folgende Zeile wird als falsch gekenzeichnet:

Project1:
Delphi-Quellcode:
Application.CreateForm(TForm2, Form2);
Warum geht das nicht, wenn ich das Form2.Show; nach dem erstellen der Form1 per Button aufrufe, gibt es keine Probleme?

Wie realisier ich es aber, dass beide Formen gleichzeitig beim Starten des Programms aufgerufen werden?

Vielen Dank, schonmal im Vorraus!

SleepyMaster 11. Aug 2004 14:00

Re: TForm1.FormCreate -> Form2.Show;
 
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Show;
end;
das müsstest du eigendlich nehmen können!

Nikolas 11. Aug 2004 14:01

Re: TForm1.FormCreate -> Form2.Show;
 
Das Problem ist wahrscheinlich, dass Form2 nach Form2 kreirt wird. Wenn du also im onCreate von Form1 Form2 anzeigen willst, gibt es Form2 noch nicht. Du könntest einen Timer nehmen, ist zwar nicht so schön geht aber.

StanY 11. Aug 2004 14:02

Re: TForm1.FormCreate -> Form2.Show;
 
Zitat:

Zitat von Toxman
Das Problem ist wahrscheinlich, dass Form2 nach Form2 kreirt wird. Wenn du also im onCreate von Form1 Form2 anzeigen willst, gibt es Form2 noch nicht. Du könntest einen Timer nehmen, ist zwar nicht so schön geht aber.

Aber warum wird der Fehler dann während des Compilieren und nicht während der Laufzeit ausgegeben?

Ich finde die Lösung mit dem Timer auch nicht so schön, denn ich kann ja keine 'Zeit' festlegen, da nciht auf jedem Pc gleich schnell die Forms erstellt sind. Gibt es keine elegantere Lösung?

Aber danke für die schnelle Antwort! :)

SleepyMaster 11. Aug 2004 14:04

Re: TForm1.FormCreate -> Form2.Show;
 
Zitat:

Gibt es keine elegantere Lösung?
Siehe oben

Luckie 11. Aug 2004 14:08

Re: TForm1.FormCreate -> Form2.Show;
 
Zitat:

Zitat von StanY
Aber warum wird der Fehler dann während des Compilieren und nicht während der Laufzeit ausgegeben?

Und wie lautet der Fehler?

mumu 11. Aug 2004 14:11

Re: TForm1.FormCreate -> Form2.Show;
 
sicher, dass es nicht während der laufzeit ist? beim kompilieren kann das ja eigentlich gar nicht sein...

sag mal kompilerfehlermeldung

sepp001 11. Aug 2004 14:26

Re: TForm1.FormCreate -> Form2.Show;
 
Hallo,

wenn die Zeile mit
Delphi-Quellcode:
Application.CreateForm(Tform2, Form2)
angemeckert wird, dann schau mal in der Projektverwaltung nach, ob die Unit, die das Form2 enthält, in das Projekt eingebunden ist. Wenn nicht, kann das diese Fehlermeldung hervorrufen.

Ciao,
sepp001

StanY 11. Aug 2004 14:29

Re: TForm1.FormCreate -> Form2.Show;
 
@mumu: nein, es stimmt doch: Der Fehler kommt _nach_ dem Compilieren.

@sepp001: Die Unit von Form2 wurde mit der Unit von Form1 assoziiert. Ja.

Ich denke mal SleepyMaster hat Recht, und mit einem Timer funktioniert es gut, da man den Intervall ja auf 1 setzen kann, da er auch erst erstellt wird, wenn die Form erstellt wird :).

SirThornberry 11. Aug 2004 14:40

Re: TForm1.FormCreate -> Form2.Show;
 
du könntest auch einfach in das Create von Form2 das show, reinschreiben (bzw. visible eigenschaft setzen) oder du fügst in der Projectdatei hinter
Delphi-Quellcode:
Application.CreateForm(Tform2, Form2)
noch
Delphi-Quellcode:
Form2.Show;
ein

bttb930 11. Aug 2004 14:40

Re: TForm1.FormCreate -> Form2.Show;
 
Vertausch doch einfach die Application.CreateForm-Befehle, so dass zuerst Form2 erstellt wird und dann Form1.

Dann wird auch automatisch Form2 beim Programmstart angezeigt.

Allerdings wird das Programm auch beendet wenn Form2 geschlossen wird.

lume96 11. Aug 2004 14:46

Re: TForm1.FormCreate -> Form2.Show;
 
Oder
Delphi-Quellcode:
Application.CreateForm(Tform2, Form2);
aus der projektdatei rausnehmen und

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Form2 := TForm2.Create(self);
   Form2.Show;

end;
benutzen.

Sollte eigentlich auch funktionieren.

SleepyMaster 11. Aug 2004 15:11

Re: TForm1.FormCreate -> Form2.Show;
 
Oder

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  Show;
end;

StanY 11. Aug 2004 20:07

Re: TForm1.FormCreate -> Form2.Show;
 
Vielen dank für die schnelle und kompetente Hilfe. Ich denke die letzte Möglichkeit werde ich verwenden, da es so sein soll, dass das Programm halt nur beendet werden soll, wenn Form1 beendet werden soll.

Ansonsten, also, wenn das nicht geht, werde cih wohl auf die timer zurückgreifen.

Danke.

edit: @SleepyMaster: Tut mir leid, dich habe ich ganz übersehen :/.

Also, da mit die Timer-Variante doch nicht mehr gefällt. Deins geht auch nicht. Dieselbe Fehlermeldung:



Delphi-Quellcode:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  frmObjTreeView.Show;
end;
Fehler:
Project mdc.exe raised exception class EAccsessViolation with Message 'Access violation at address 00445BEA in module 'mdc.exe'. Read of address 000002F4'. Process stopped. Use Step or Run to continue.
|OK| |HELP|

Aenogym 11. Aug 2004 21:46

Re: TForm1.FormCreate -> Form2.Show;
 
Zitat:

Zitat von SleepyMaster
Oder

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  Show;
end;

das geht problemlos...

Aenogym

StanY 11. Aug 2004 21:51

Re: TForm1.FormCreate -> Form2.Show;
 
Aber wie mache ich es, dass die anderen Formen/Forms auch erstellt werden, wenn ich frmMain erstelle, also, das Programm starte?

Einafch nur in Form2.FormCrate das reinschreiben geht nämlich net :/.

StanY 13. Aug 2004 13:01

Re: TForm1.FormCreate -> Form2.Show;
 
Weiß niemand eine Antwort *sry wegen des Doppelposts* :/

teebee 13. Aug 2004 13:37

Re: TForm1.FormCreate -> Form2.Show;
 
Zitat:

Zitat von StanY
Aber wie mache ich es, dass die anderen Formen/Forms auch erstellt werden, wenn ich frmMain erstelle, also, das Programm starte?

Das kannst Du in den Projektoptionen einstellen, per Default werden aber alle Forms beim Programmstart erzeugt.
Wenn Du sie auch noch alle anzeigen willst, rufe das entsprechende FormX.Show in der Projektdatei nach dem CreateForm auf.

Gruß, teebee

lume96 13. Aug 2004 13:48

Re: TForm1.FormCreate -> Form2.Show;
 
Hi,

Zitat:

Zitat von StanY
Aber wie mache ich es, dass die anderen Formen/Forms auch erstellt werden, wenn ich frmMain erstelle, also, das Programm starte?

Einafch nur in Form2.FormCrate das reinschreiben geht nämlich net :/.

Zwei Möglichkeiten :
1) über das Menü Projekt/Optionen (frei aus dem Französischen übersetzt, hab keine deutsche Delphi-Version)

2) Manuell in der Projektdatei : (anzeigen durch Menü Projekt/Source anzeigen (wieder frei aus dem Französischen)). Die Projektdatei könnte dann wie folgt aussehen :

Delphi-Quellcode:
program test;

uses
  Forms,
  main in 'main.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Wie man sehen kann, werden zuerst die Forms erstellt, dann Application.Run aufgerufen.

Der Form.Show event des MainForms wird erst nach Application.Run aufgerufen, und zu dem Zeitpunkt ist Form2 schon erstellt.

Somit sollte bei einem :
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin

   Form2.Show;

end;
auch keine AccessViolation mehr auftreten. Die tritt nämlich 'nur' auf, wenn Du Form2.Show aufrufst, bevor der Form2 estellt wurde.

Hab das bei mir (Delphi 7 Pro) noch mal kurz getestet und es funktioniert einwandfrei.

MfG,
Lutz

StanY 13. Aug 2004 14:25

Re: TForm1.FormCreate -> Form2.Show;
 
Vielen Dank. Funktioniert Einwandfrei :).

DelphiFreund 13. Aug 2004 14:45

Re: TForm1.FormCreate -> Form2.Show;
 
Mit
Delphi-Quellcode:
Form1.OnActivate(Sender: TObject);
begin
  Form2.Show;
end;
dürfte es auch gehen.

Gruß DelphiFreund


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz