Hallo zusammen,
wieder mal habe ich ein (vermutlich) kleines Problem.
Ich habe mir ein kleines Update-Programm geschrieben, was aus dem Netz eine Datei auf den PC kopiert. Das Funktioniert auch soweit prima, allerdings wollte ich den Bediener per verschiedene Panel davon unterrichten, was er gerade macht.
Beispiel:
Panel1: "Es steht eine neue Version zur Verfügung."
Panel2: "Der Download wurde gestartet, bitte warten!"
Panel3: "Der Download wurde abgeschlossen."
Diese Panel blende ich per 'visible' und 'true' oder 'false' entweder ein oder aus - zumindest wollte ich das.
Panel1 wird mit dem Start des Programms eingeblendet. Klicke ich auf "weiter" (btn_weiter), wird mir zwar das Panel1 ausgeblendet aber nicht das Panel2 eingeblendet. Dies geschieht erst nachdem die Datei runter geladen wurde. Geprüft habe ich es, indem ich "Panel3.Visible := True;" raus genommen habe.
Nun die Frage: Warum wird Panel2 erst nachdem ich den Download-Befehl gegeben habe eingeblendet? Das Panel1 wird korrekt ausgeblendet. Hier mein Quelltext:
Delphi-Quellcode:
procedure DeleteIECache;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir: LongWord;
dwEntrySize: LongWord;
begin
dwEntrySize := 0;
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize;
hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
if hCacheDir <> 0 then
begin
repeat
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo, dwEntrySize);
dwEntrySize := 0;
FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize;
until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize);
end;
FreeMem(lpEntryInfo, dwEntrySize);
FindCloseUrlCache(hCacheDir);
end;
Delphi-Quellcode:
procedure TForm1.btn_weiterClick(Sender: TObject);
var
quelldatei : String; //-- Quellpfad im Web
zieldatei : String; //-- Zielpfand auf Rechner
begin
Panel2.Visible := True;
Panel1.Visible := False;
quelldatei := 'http://www.irgendeine-seite.de/dateiname.typ';
zieldatei := 'c:\Programme\mein Programm\dateiname.typ';
DeleteIECache; //-- Cache leeren damit Datei auch tatsächlich aus dem Web geladen wird
UrlDownloadToFile(nil, PChar(quelldatei), PChar(zieldatei), 0, nil);
//Panel3.Visible := True;
Panel2.Visible := False;
btn_weiter.Visible := False;
btn_fertig.Visible := True;
end;
Habt Ihr eine Idee? Vielen Dank schon einmal!
LG DieFliege