Form in OnCreate Anzeige anzeigen lassen - Fehler
Guten Tag ;)
Ich habe folgendes Problem, sobald ich in der MainForm meines Programmes eine Anweisung wie "Form2.Show" einbinde, oder einen Button Klick, der dies erledigen soll, dann wirft mir mein Programm beim start eine EAccess Voiolation Meldung hin... und unterlegt mir folgendes im Code
Delphi-Quellcode:
Mein Code Schnippsel im OnCreate ist folgender:
program XYZ;
uses Forms, UiChem in 'UiChem.pas' {Form1}, Ablage in 'Ablage.pas' {Form2}, Rechner in 'Rechner.pas' {Form3}; {$R *.res} begin Application.Initialize; Application.Title := 'XYZ'; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); {<<-- wird dann hellrot unterlegt} Application.CreateForm(TForm3, Form3); Application.Run; end.
Delphi-Quellcode:
Ich versuche diese Form Testweise als eine Art Splash Screen einzubinden, allerdings akzeptiert er einfach kein Form.Show im OnCreater meiner MainForm, was genau ist das los...?
procedure TForm1.BtSplashClick(Sender: TObject);
begin Form2.Show; sleep(1000); Form2.Hide; end; Nager Edit: Achja, ich weiß, dass die Methode ziemlich simpel ist etc. allerdings brauch ich den Splash nicht, damit das Programm laden kann(Wie im hiesigen Tutorial beschrieben ;)), denn das geht schnell, der soll einfach nur erscheinen... |
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Zitat:
P@Tti |
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Zitat:
|
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Wie man unschwer erkennen kann, wird form1 vor form2 erzeugt. Also folgende Reihenfolge:
Form1 erzeugen Form1.onCreate Form2 erzeugen Du rufst nun aber im FormCreate eine Methode (show) eines Objektes(form2) auf, das gar nicht existiert. Setze das Ganze ins onShow, das müsste auch funktionieren. |
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Habs bei mir rekonstruiert, funktioniert nur im OnShow, da er beim OnCreate Form2 noch nicht kennt (Erstellungsreihenfolge).
|
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Zitat:
Allerdings gibts dann immer noch den Fehler wenns nur im onShow steht, also noch schnell was vertauscht und es scheint zu gehen...
Delphi-Quellcode:
Wunderbar ;)
Application.Initialize;
Application.Title := 'XYZ'; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm3, Form3); Application.Run; edit: doch nicht... Jetzt kommt plötzlich ein Fehler das er Visible nicht bei OnShow und OnHide verändern kann... Code sieht mittlerweile so aus:
Delphi-Quellcode:
und so...
begin
Application.Initialize; Application.Title := 'XYZ'; Application.CreateForm(TForm4, Form4); Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.Run; end.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin Form1.Visible := false; Form4.Show; sleep(2000); Form1.Visible := true; Form4.Visible := false; end; |
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
oder so ... ;-)
|
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Naja doch nicht irgendwie, wie du im Edit siehst, irgendwo is wieder so n saublöder Fehler drin...
|
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Du kannst doch visible nicht im onShow verändern! Am Ende setzt du nämlich visible auf true, sodass onShow aufgerufen wird-> nochmal visible auf true->nochmal onShow->usw.
Ist form1 dein Mainform? Dann hilft Application.showmainform:=false; |
Re: Form in OnCreate Anzeige anzeigen lassen - Fehler
Das mit dem Application.ShowMainform weiß ich jetzt net wos genau hinkommt, ich hab allerdings was gefunden per Google, was das ganze recht einfach macht...
Delphi-Quellcode:
Allerdings kann ich jetzt keinen sleep Befehl einbinden, da er das nicht kennt, aber das lässt sich lösen indem man in die uses noch ein "SysUtils," einfließen lässt, dann kann ich einen sleep(2000) z.b einbinden, klappt wunderbar... endlich :D
program XYZ;
uses Forms, UiChem in 'UiChem.pas' {Form1}, Ablage in 'Ablage.pas' {Form2}, Rechner in 'Rechner.pas' {Form3}, Splash in 'Splash.pas' {Form4}; {$R *.res} begin Form4 := TForm4.Create (Application); {Splash Screen anzeigen} try Form4.Show; Form4.Update; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Form4.Hide; {Splash Screen ausblenden} finally Form4.Free; end; Application.Run; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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