![]() |
Form nicht zu sehen !?
Guten Morgen alle.. :hi:
ich brauche mal wieder Eure Hilfe. - ich bekomme meine Form erst ganz kurz nach dem Dateidownload ( 3 Dateien ) zu sehen. - Application.ProcessMessages oder IdAntiFreeze haben keine Auswirkung Was passieren soll: die exe startet, lädt die Dateien ( optische Kontrolle ProgressBar ) und schließt sich wieder.
Delphi-Quellcode:
wo habe ich den Denkfehler ? :gruebel:
procedure TFUMain.FormShow(Sender: TObject);
var A: Integer; begin JvXPProgressbar1.Position:= 0; INIEinlesen; UINIEinlesen; for A := 1 to UFiles do begin FileINI(IntToStr(A)); DateiDownload(USource,UZiel); end; VersionDatum:= UVersionDatum; INISchreiben; ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL); Application.Terminate; end; procedure TFUMain.DateiDownload(Source, Ziel: String); var fStream: TFileStream; TempZiel: String; begin JvXPProgressBar1.Position:= 0; JvXpProgressBar1.Refresh; if Copy(Ziel,1,2) ='DB' then begin if DBHost = '' then begin TempZiel:= DBOrdnerL + Copy(Ziel,3,Length(Ziel)-2); end else begin TempZiel:= DBOrdnerN + Copy(Ziel,3,Length(Ziel)-2); end; end else begin TempZiel:= InstallPfad + '\' + Ziel; end; Ziel:= TempZiel; JvLabel1.Caption:= 'Download nach: ' + Ziel + '...'; JvLabel1.Refresh; try fStream:= TFileStream.Create(Ziel,fmCreate or fmShareDenyNone); try idHTTP1.Get(Source, fStream); finally fStream.Free; end; except ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL); Application.Terminate; end; end; procedure TFUMain.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin JvXPProgressBar1.Position:= AWorkCount; Application.ProcessMessages; end; procedure TFUMain.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin JvXPProgressBar1.Max:= AWorkCountMax; end; |
Re: Form nicht zu sehen !?
Die Stelle an der du es hast ist schuld. OnShow könnte auch heißen: OnDirectBeforeShow
|
Re: Form nicht zu sehen !?
Danke für die schnelle Reaktion...
OnDirectBeforeShow kennt mein ObjectInspector der Form nicht :gruebel: Im Prinzip war dieser Effekt ja logisch, da ja OnShow nicht erst ausgelöst wird nach Anzeige der Form sondern beim setzen visible:= true Ich dachte aber, daß mit Application.Processmessages die Form dann doch zu sehen ist. |
Re: Form nicht zu sehen !?
Nein, er meinte damit, das das Ereignis OnShow nicht nach, sondern unmittelbar vor dem Anzeigen ausgelöst wird. Das heisst Du machst die ganze Arbeitet tatsächlich _vor_ dem Anzeigen des Forms.
|
Re: Form nicht zu sehen !?
Moin, Moin,
also wäre eine mögliche Lösung: Du deklarierst eine eigene Proc "AfterShow", die auf eine von dir definierte WM_UserMessage reagiert. Als letzte Zeile in OnShow sendest du selbst die WM_UserMessage ab. Dann sollte es funktionieren |
Re: Form nicht zu sehen !?
tja und wie positioniere ich die "Arbeit" nach OnShow ?
OnPaint OnActivate sind ja eher ungünstig, da sie bei Neuzeichnen, Focuswechsel immer aufs neue ausgelöst werden. was würdet ihr von einem TimerEvent halten, Timer in in OnShow starten (1s) und im OnTimer die Arbeit. ist so was unsauber ? @ taaktaak: Keine schlechte Idee :thumb: |
Re: Form nicht zu sehen !?
Zitat:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin is_first_call := TRUE; end; procedute TForm1.FormPaint(Sender: TObject); begin if (is_first_call) then begin is_first_call := False; //do what you want; end; end; |
Re: Form nicht zu sehen !?
Das mit der Boolean würde ich lieber im Activate machen, sonst verzögert sich das Zeichnen um die Arbeitszeit, und das ist eher wieder ungeschickt.
Ins Paint würde ich nie zeitintensive Aufgaben legen. Aber sonst ist der Ansatz prinzipiell nicht schlecht. |
Re: Form nicht zu sehen !?
Danke für Eure zahlreichen Tipps...
habe jetzt:
Delphi-Quellcode:
const
WM_FERTIG = WM_USER + 100;
Delphi-Quellcode:
procedure HabeFertig(var Msg: TMessage); Message WM_FERTIG;
Delphi-Quellcode:
procedure TFUMain.FormShow(Sender: TObject);
begin JvXPProgressbar1.Position:= 0; INIEinlesen; UINIEinlesen; PostMessage(Handle, WM_FERTIG, 0, 0); end;
Delphi-Quellcode:
...und es arbeitet doch :-D
procedure TFUMain.HabeFertig(var Msg: TMessage);
var A: Integer; begin for A := 1 to UFiles do begin FileINI(IntToStr(A)); DateiDownload(USource,UZiel); end; VersionDatum:= UVersionDatum; INISchreiben; ShellExecute(Application.Handle,'open',PChar('eAV.exe'),NIL,NIL,SW_SHOWNORMAL); Application.Terminate; end; Danke an alle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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 by Thomas Breitkreuz