AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateidownload

Ein Thema von DieFliege · begonnen am 19. Mai 2017 · letzter Beitrag vom 21. Mai 2017
Antwort Antwort
SneakyBagels
(Gast)

n/a Beiträge
 
#1

AW: Dateidownload

  Alt 21. Mai 2017, 11:57
Vielleicht so?

Benötigt: http://stackoverflow.com/questions/2...59305#28459305

Delphi-Quellcode:
// Variablen
updateThread: TUpdateThread
HTTPFileDownload: THTTPFileDownload;
procedure IdHTTPProgressOnChange(Sender: TObject);

// Initialisierung
updateThread := nil;

// Im Buttonclick
if updateThread = nil then
 updateThread := TUpdateThread.Create;

// Thread-Konstrukt
type
 TUpdateThread = class(TThread)
 protected
  procedure Execute; override;
 public
  constructor Create;
  destructor Destroy; override;
 end;

constructor TUpdateThread.Create;
begin
 inherited Create(False);
end;

destructor TUpdateThread.Destroy;
begin
 inherited Destroy;
end;

procedure TUpdateThread.Execute;
begin
 // Downloade Datei und und und...

 Form1.HTTPFileDownload := THTTPFileDownload.Create(nil);
 Form1.HTTPFileDownload.OnChange := Form1.IdHTTPProgressOnChange;

 try
  if Form1.HTTPFileDownload.DownloadFile(sURL, sDestinationOnDisk) then
   begin
    // Datei heruntergeladen
   end else
    begin
     // Fehler behandeln
    end;
 finally
  Form1.HTTPFileDownload.Free;
 end;

// Progress
procedure TForm1.IdHTTPProgressOnChange(Sender: TObject);
var
 sTmp: string;
 iDownloaded: Int64;
 iPercent: Integer;
begin
 iPercent := THTTPFileDownload(Sender).Progress;
 iDownloaded := HTTPFileDownload.BytesTransfered div 1024;

 if iPercent = 100 then
  Exit;

 if (iPercent mod 5 = 0) then
  begin
   Sleep(1);

   // sTmp := // string zusammenbasteln aus u.a.
   // iPercent, iDownloaded

   // Beispielausgabe mit entsprechenden Anpassungen im Execute-Teil, bei mehreren Dateien:
   // File 6/12: Downloading (91% | 964 KB/1061 KB)
  end;
end;
Deine Prozedur DeleteIECache kannst du löschen. Es gibt schon etwas Fertiges. Einfach Winapi.WinInet.DeleteUrlCacheEntry(filename) aufrufen.

Geändert von SneakyBagels (21. Mai 2017 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dateidownload

  Alt 21. Mai 2017, 12:03
Zitat:
Vielleicht so?
...definitiv NÖ!
Delphi-Quellcode:
procedure TUpdateThread.Execute;
begin
 // Downloade Datei und und und...

 Form1.HTTPFileDownload := THTTPFileDownload.Create(nil);
 Form1.HTTPFileDownload.OnChange := Form1.IdHTTPProgressOnChange;
...
...ohne Synchronisierung auf die Form Variable im Thread zugreifen ist ein No-Go. Wieso soll der Thread die Form kennen?
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#3

AW: Dateidownload

  Alt 21. Mai 2017, 12:07
Ist jetzt einfach abgetippt. Verwende ich schon seit etlichen Jahren so und bisher hat sich niemand beschwert (von XP bis Windows 10).
Ich greife doch nicht auf irgendeine VCL-Komponente zu, so schlimm kann es also nicht sein.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dateidownload

  Alt 21. Mai 2017, 12:14
Zitat:
Verwende ich schon seit etlichen Jahren so und bisher hat sich niemand beschwert (von XP bis Windows 10).
...ich empfinde das als Zufall.
Zitat:
Ich greife doch nicht auf irgendeine VCL-Komponente zu, so schlimm kann es also nicht sein.
...was ist Form1?
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#5

AW: Dateidownload

  Alt 21. Mai 2017, 12:26
Zitat:
...ich empfinde das als Zufall.
Denke ich nicht. So schlimm kann es nicht sein, wie hier immer gepredigt wird. Denn wenn es tatsächlich so wäre, dann hätten andere und ich in den letzten, etlichen Jahren viele viele Fehler sehen müssen.

Frage:
wäre es denn besser ein Record in einer Unit ohne Form abzulegen, eine Instanz zu erzeugen und auf diese Daten zuzugreifen? Dann wäre Form1 weg.
Dann wäre es wenigstens ein wenig OOP und Synchronize bräuchte man auch nicht mehr.

Geändert von SneakyBagels (21. Mai 2017 um 12:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.432 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dateidownload

  Alt 21. Mai 2017, 13:44
Zitat:
So schlimm kann es nicht sein, wie hier immer gepredigt wird. Denn wenn es tatsächlich so wäre...
An dieser Stelle bin ich raus. Ich habe mir kürzlich mein Maul verbrannt als ich das die Nachteile des WITH erklären wollte. Das brauche ich nicht nochmal. Ich hoffe daß du auch von anderer Stelle die Fehlerquellen dieser Konstellation gezeigt bekommst.

Wenn du es erklärst haben möchtest, mache bitte einen anderen Thread auf.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#7

AW: Dateidownload

  Alt 21. Mai 2017, 13:52
Zitat:
An dieser Stelle bin ich raus.
Das beantwortet meine Frage aber nicht, die den TE auch interessieren könnte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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