![]() |
Frage zu FormCreate
Hallo zusammen,
ich habe eine Anfängerfrage. Wenn ich folgenden Quelltext in Delphi einbinde:
Delphi-Quellcode:
Dann wird mir zuerst die message angezeigt, und erst nachdem
procedure TForm1.FormCreate(Sender: TObject);
begin showmessage('Hallo'); end; end. ich auf ok geklickt habe wird das Hauptfenster Form1 erzeugt. Wie kann ich den bewirken, das erst das Hauptfenster und dann erst die message, oder was auch immer dann folgt ausgeführt wird. Gruß Sebastian |
Re: Frage zu FormCreate
Hi,
versuch mal OnShow, anstatt OnCreate. |
Re: Frage zu FormCreate
Hallo,
hat leider den gleichen Effekt, erst Message Box, dann die Form1 |
Re: Frage zu FormCreate
Dann versuch OnActivate :D
|
Re: Frage zu FormCreate
Das wird so aber auch in OnShow nicht funktionieren.
Das ShowMessage hält die Verwarbeitung solange auf, bis der Button gedrückt wurde und das MessageFenster weg ist. Also wird das Formular auch erst angezeigt, wenn die Message bestätigt wurde. |
Re: Frage zu FormCreate
Also mit OnActivate seh ich die Form und die MessageBox. Sollte also klappen. Hab's eben getestet.
|
Re: Frage zu FormCreate
Allerdings wird OnActivate bei jedem Hervorholen aufgerufen.
|
Re: Frage zu FormCreate
Zitat:
|
Re: Frage zu FormCreate
Das ist klar, aber mittels bool'scher Variable kann man das ja nur einmal aufrufen lassen. :zwinker:
|
Re: Frage zu FormCreate
Hallo,
OnCreate und OnShow werden aufgerufen, bevor die Form angezeigt wird. Daher auch das von die beschriebene verhalten. Mache aus deinem TForm1.FormCreate ein TForm1.InitShowMessage. Diese rufst du dann nachdem Show für Form1 auf. Eine weitere, nicht sehr schöne Möglichkeit, ist die Verwendung eines Timers. Diesen startest du im OnCreate oder OnShow und im OnTimer mache dein ShowMessage. LG, HiWieGehts |
Re: Frage zu FormCreate
Zitat:
Alles andere ist Murks. Das hätten die Leute bei meinem alten Arbeitgeber so gemacht, weill sie Luschen sind und es nicht besser konnten. |
Re: Frage zu FormCreate
Zitat:
|
Re: Frage zu FormCreate
Hi,
kannst du das etwas näher erklären? Zitat:
|
Re: Frage zu FormCreate
Delphi-Quellcode:
Btw. stimme ich Raven zu, dass das mit dem Marker die eleganteste Lösung ist.
type
TForm1 = class(TForm) [...] private FFirstShow: Boolean; end; implementation procedure TForm1.Create(Sender: TObject); begin FFirstShow := true; end; procedure TForm1.Activate(Sender: TObject); begin if (FFirstShow) then begin ShowMessage('Hallo!'); FFirstShow := false; end; end; |
Re: Frage zu FormCreate
oder du regelst das ganze gleich in der Projektdatei (Projekt -> Quelltext anzeigen)
|
Re: Frage zu FormCreate
Das geht nicht. Die Formulare werden erst in Application.Run angezeigt, und das kehrt erst ganz am Ende zurück.
|
Re: Frage zu FormCreate
"Falsch", werden sie nicht. :zwinker:
Nutze in meinem Projekt folgendes:
Delphi-Quellcode:
Geht ohne Probleme ;)
begin
Application.Initialize; flogin := Tflogin.Create(Application); if flogin.ShowModal = mrOK then begin Application.CreateForm(Tfmain, fmain); Application.Run; end; end. |
Re: Frage zu FormCreate
Ja, ShowModal kann Application.Run ersetzen, wie man im VCL-Code sieht.
|
Re: Frage zu FormCreate
Vielen Dank, die Idee mit dem Merker ist gut!
|
Re: Frage zu FormCreate
Zitat:
Delphi-Quellcode:
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Form1.Show; Form1.Refresh; Form1.MyOwnCreate; // Eigene procedure, hier kannst du deine nachricht anzeigen lassen Application.Run; end. |
Re: Frage zu FormCreate
Okay, ihr habt gewonnen. Nur zum Anzeigen braucht man ja keine Nachrichtenschleife.
|
Re: Frage zu FormCreate
Zitat:
begin ShowMessage('Hallo!'); end; Procedure TFormMain.Irgendwas; begin .. .. Form1.Show; Form1.InitShowMessage; end; Das funktioniert aber nur, wenn es sich bei Form1 nicht um die Hauptform des Programms handelt. Wenn dein Ziel ein Splash Screens ist, solltest du mal danach suchen - dafür gibt es fertige Lösungsvorschläge. LG, HiWieGehts |
Re: Frage zu FormCreate
Warum so umständlich? Das mit bool'scher Variable und OnActivate funktioniert 1a.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 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