![]() |
Datei bei Programmstart laden, nachdem form sichtbar ist.
moin,
ich versuche grade verzweifelt meine Datei-Laderoutine (für parameter) so zu starten, dass diese erst ausgeführt wird, wenn das Mainform komplett sichtbar ist. Leider klappt das noch nicht so ganz...TForm.OnShow ist auch noch zu zeitig und im oncreate ne nachricht schicken genauso...hab schon im forum, bei DF und google rumgesucht, aber nichts gefunden, was mir weiterhilft. Wie könnte man das realisieren? Gruß Frank |
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Im onShow nochmal eine (eigenes definiert) Windows-Message schicken oder einen Timer starten.
|
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
OnPaint wäre wohl die richtige Stelle. Du musst aber einen Flag setzen, damit die Datei nicht jedesmal geladen wird, sondern nur beim ersten mal.
|
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Zitat:
Delphi-Quellcode:
bei Luckies Vorschlag wird das form zwar angezeigt, ist aber noch nicht fertig dargestellt (komponenten sind noch nicht gezeichnet).
const
WM_LoadFile=WM_USER+10; type TForm_DFMMain = class(TForm) ... private { Private-Deklarationen } FileToLoad:string; Procedure WMLoadFile(Var Msg: TMessage); message WM_LoadFile; ... end; procedure TForm_DFMMain.FormCreate(Sender: TObject); begin if (paramCount>0) then begin if fileExists(ParamStr(paramCount)) then FileToLoad:=ParamStr(paramCount); end; end; Procedure TForm_DFMMain.WMLoadFile(Var Msg: TMessage); begin LoadDFMFile(FileToLoad); FileToLoad:=''; end; procedure TForm_DFMMain.FormShow(Sender: TObject); begin if FileToLoad<>'' then begin SendMessage(self.handle,WM_LoadFile,0,0); end; end; Gruß Frank |
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Nicht mit SendMessage sondern PostMessage verwenden!
|
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
was willst du damit erreichen? Also warum soll die Datei erst geladen werden wenn dein Form sichtbar ist?
|
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Sieht einfach etwas schicker aus. Und wenn es etwas länger dauert, wundert sich der Anwender nicht, dass das Starten so lange dauert, wenn er sieht, das was passiert.
|
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Hallo,
Delphi-Quellcode:
Idealerweise packt man so ne Funktionalität
FormCreate
bFirstInForm:= True; // form-variable setzen FormActivate if bFirstInForm then begin bFirstInForm:= False; if not LoadStartup then PostMessage(Handle, WM_CLOSE, 0, 0); end; function TForm1.LoadStartup: Boolean; begin Result:= True; auf False setzen zum Form beenden während des Starts end; in ein Basisform und leitet die anderen Forsm davon ab, LoadStartup wäre dann virtual; Heiko |
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Es dient nur der optischen Signalisierung für den User, dass auch wirklich ne Datei geladen wird, ohne dass dieser erstmal gar nichts mitbekommt und nur im TaskManager nen prozess sieht oder ein unvollständiges Fenster. Später soll dann noch ne Progressbar rein, um den Fortschritt der aktion darzustellen...
mit Postmessage sieht es ähnlich aus wie im OnPaint (darstellung unvollständig). auch die Message im OnActivate schicken brachte keinen erfolg :cry:, (so hab ich zumindest hoika's Beitrag verstanden, da der Sinn von dem WM_Close mir nicht ganz schlüssig ist...letztendlich wird im OnActivate die Datei geladen, wenn es das erste OnActivate ist...da hab ich jetzt noch ne Nachricht als delay dazwischen geschoben). ich glaube, das Problem lässt sich wohl doch nur mit nem timer lösen... |
Re: Datei bei Programmstart laden, nachdem form sichtbar ist
Hallo,
dann lass das LoadStartup einfach weg. Das war schon der nächste (mögliche Punkt) "Wie beende ich ein Form beim Starten, so dass es aber vorher noch angezeigt wird" Lässt du das weg oder lässt Result auf true, wird dein Form angezeigt, falls nicht, mache nach dem bFirstInForm:= False noch nen Application.ProcessMessages und dann erst deinen Code.
Delphi-Quellcode:
Heiko
FormCreate
bFirstInForm:= True; // form-variable setzen FormActivate if bFirstInForm then begin bFirstInForm:= False; Application.ProcessMessages; // dein Code end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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