Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei bei Programmstart laden, nachdem form sichtbar ist. (https://www.delphipraxis.net/92509-datei-bei-programmstart-laden-nachdem-form-sichtbar-ist.html)

_frank_ 21. Mai 2007 13:39


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

Bernhard Geyer 21. Mai 2007 13:49

Re: Datei bei Programmstart laden, nachdem form sichtbar ist
 
Im onShow nochmal eine (eigenes definiert) Windows-Message schicken oder einen Timer starten.

Luckie 21. Mai 2007 13:49

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.

_frank_ 21. Mai 2007 14:01

Re: Datei bei Programmstart laden, nachdem form sichtbar ist
 
Zitat:

Zitat von Bernhard Geyer
Im onShow nochmal eine (eigenes definiert) Windows-Message schicken oder einen Timer starten.

Das mit dem timer wollte ich eigentlich vermeiden...das mit der Nachricht im OnShow klappt auch nicht (Task-button vorhanden, aber form noch nicht sichtbar):

Delphi-Quellcode:
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;
bei Luckies Vorschlag wird das form zwar angezeigt, ist aber noch nicht fertig dargestellt (komponenten sind noch nicht gezeichnet).

Gruß Frank

Bernhard Geyer 21. Mai 2007 14:03

Re: Datei bei Programmstart laden, nachdem form sichtbar ist
 
Nicht mit SendMessage sondern PostMessage verwenden!

SirThornberry 21. Mai 2007 14:07

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?

Luckie 21. Mai 2007 14:11

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.

hoika 21. Mai 2007 14:21

Re: Datei bei Programmstart laden, nachdem form sichtbar ist
 
Hallo,

Delphi-Quellcode:
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;
Idealerweise packt man so ne Funktionalität
in ein Basisform und leitet die anderen Forsm davon ab,
LoadStartup wäre dann virtual;


Heiko

_frank_ 21. Mai 2007 14:43

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...

hoika 21. Mai 2007 14:48

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:
FormCreate
  bFirstInForm:= True; // form-variable setzen

FormActivate
  if bFirstInForm then
  begin
    bFirstInForm:= False;

    Application.ProcessMessages;

// dein Code
  end;
Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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