Thema: Delphi Dateidownload

Einzelnen Beitrag anzeigen

DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#1

Dateidownload

  Alt 19. Mai 2017, 10:11
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

Geändert von DieFliege (19. Mai 2017 um 10:14 Uhr) Grund: Tippfehler
  Mit Zitat antworten Zitat