Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy FTP mit Progressbar (https://www.delphipraxis.net/194190-indy-ftp-mit-progressbar.html)

Walter Landwehr 26. Okt 2017 15:06

Indy FTP mit Progressbar
 
Hallo,

ich bin schier am verzweifeln.

Ich lade mir eine Datei mit dem Indy FTP (TIdFTP) herunter und möchte dies in einer Progressbar anzeigen. Im Debug Modus zeigt mir das auch an, aber im Release Modus zeigt mir die Progressbar nichts an.
Hier mal mein Code:
Delphi-Quellcode:
   ProgressBar.Visible := True;
   ProgressBar.Max := UpdaterFtp.Size('Natuprax.zip');
   ProgressBar.Position := 0;
   ProgressBar.Steps := 1;
   ProgressBar.Min := 0;
   PageControl.ActivePage := DownloadTab;
   NeuStartenBtn.Enabled := False;
   AbbrechenBtn.Enabled := False;
   Refresh;
   if not UpdaterFtp.Connected then
    UpdaterFtp.Connect;
   UpdaterFtp.Get('Natuprax.zip', extractFilePath(Application.ExeName) + 'NatupraxNeu.zip', true, false);

procedure TUpdaterFrm.UpdaterFtpWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  ProgressBar.Position := AWorkCount;
  Application.ProcessMessages;
end;

procedure TUpdaterFrm.UpdaterFtpWorkBegin(ASender: TObject;
  AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
  progressbar.max := AWorkCountMax;
end;

procedure TUpdaterFrm.UpdaterFtpWorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  progressbar.Position := 0;
end;
Es gibt hier viele Einträge aus dem letzten Jahrzehnt aber leider keine Lösung.

Ich benutze Delphi 10.1 Berlin

Hat jemand eine Idee woran das liegt.

EWeiss 26. Okt 2017 15:16

AW: Indy FTP mit Progressbar
 
Zitat:

ProgressBar.Position := AWorkCount;
Application.ProcessMessages;
Sorry.. Das ist sehr schlecht und bremst die Progressbar nur aus.
versuche es mal so.

Delphi-Quellcode:
Progress := AWorkCount;

if (ProgressBar.Position <> Progress) then
  ProgressBar.Position := Progress;
Die Progressbar wird nur dann aktualisiert wenn nötig.
das schont die Ressourcen und beschleunigt das zeichnen der Progressbar selbst.

gruss

Walter Landwehr 26. Okt 2017 15:34

AW: Indy FTP mit Progressbar
 
Hallo, nein daran liegt es nicht. Ich habe mal den Code geändert und festgestellt das, das UpdaterFtpWork gar nicht richtig ausgeführt wird.
Der Wert in Progress bleibt immer gleich.
Delphi-Quellcode:
procedure TUpdaterFrm.UpdaterFtpWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
var Progress : Integer;
begin
  Progress := AWorkCount;
  if ProgressBar.Position <> Progress then
  begin
    ProgressBar.Position := Progress;
    showMessage(IntToStr(Progress));
  end;
  Application.ProcessMessages;
end;

Glados 26. Okt 2017 15:35

AW: Indy FTP mit Progressbar
 
Bevor man das hier weiter ausführt eine Frage:
ist das Programm nur für dich oder auch für andere bestimmt?

Walter Landwehr 26. Okt 2017 15:37

AW: Indy FTP mit Progressbar
 
Es ist mein Programm. Warum willst Du das wissen.

Glados 26. Okt 2017 15:38

AW: Indy FTP mit Progressbar
 
Weil wenn man das für andere freigibt würde ich niemals FTP nehmen.

Auch so empfehle ich dir per HTTP herunterzuladen und dich von FTP zu verabschieden.
Hier ist alles erklärt: https://stackoverflow.com/questions/...59305#28459305

EWeiss 26. Okt 2017 15:41

AW: Indy FTP mit Progressbar
 
Zitat:

Der Wert in Progress bleibt immer gleich.
Ok! Aber destotrotz ein Application.ProcessMessages; ist der Tod für deine Progressbar ;)
Diese sollte man nicht unterbrechen und nur aktualisieren wenn nötig.

Zitat:

und dich von FTP zu verabschieden.
Warum sollte er das tun wenn er einen FTP Server hat?
Das war aber auch nicht die frage.

gruss

Glados 26. Okt 2017 15:57

AW: Indy FTP mit Progressbar
 
Zitat:

Warum sollte er das tun
Weil es einfach unsicher ist irgendwelche Logindaten in eine Datei mit einzukompilieren.
Alles was man per FTP runterladen kann, kann man auch über HTTP runterladen.

Eine korrekt funktionierende Lösung habe ich oben bereits erwähnt.

Zitat:

Ok! Aber destotrotz ein Application.ProcessMessages; ist der Tod für deine Progressbar
Diese sollte man nicht unterbrechen und nur aktualisieren wenn nötig.
Das verstehe ich irgendwie nicht. Warum sollte das der Tod sein? Wir wissen ja nicht einmal, ob er einen Thread benutzt oder nicht.
Als Tod würde ich es nicht betrachten. Denn das ist es keinesfalls.

Daniel 26. Okt 2017 16:17

AW: Indy FTP mit Progressbar
 
Zitat:

Zitat von Glados (Beitrag 1384272)
Zitat:

Warum sollte er das tun
Weil es einfach unsicher ist irgendwelche Logindaten in eine Datei mit einzukompilieren.
Alles was man per FTP runterladen kann, kann man auch über HTTP runterladen.

Eine korrekt funktionierende Lösung habe ich oben bereits erwähnt.

Du hast eine Lösung verlinkt, aber die macht etwas anderes. Um die Frage der Logindaten hast Du Dich komplett gedrückt. Der von Dir verlinkte Code lädt eine Datei via HTTPS herunter, nicht mehr und nicht weniger. Es ist grundsätzlich richtig, den Transportweg zu sichern. Aber den von Dir vorgebrachten Einwand mit den einkompilierten Logindaten hast Du selbst auch nicht behandelt.

EWeiss 26. Okt 2017 16:23

AW: Indy FTP mit Progressbar
 
Zitat:

Zitat von Glados (Beitrag 1384272)
Zitat:

Warum sollte er das tun
Weil es einfach unsicher ist irgendwelche Logindaten in eine Datei mit einzukompilieren.
Alles was man per FTP runterladen kann, kann man auch über HTTP runterladen.

Eine korrekt funktionierende Lösung habe ich oben bereits erwähnt.

Zitat:

Ok! Aber destotrotz ein Application.ProcessMessages; ist der Tod für deine Progressbar
Diese sollte man nicht unterbrechen und nur aktualisieren wenn nötig.
Das verstehe ich irgendwie nicht. Warum sollte das der Tod sein? Wir wissen ja nicht einmal, ob er einen Thread benutzt oder nicht.
Als Tod würde ich es nicht betrachten. Denn das ist es keinesfalls.

Wenn du anstelle des zeichnen der Progressbar die Anwendung weiterhin ihr spielchen treiben lässt was glaubst wie genau
die anzeige der Progessbar dann noch ist? Bzw.. diese aktualisiert.

Hast du mal eine Progressbar unter Volllast einer Anwendung getestet?
Ich meine so was hier.
Glaubst du im ernst das die Progressbar jemals ihren Status ändert? Wenn du da noch mit ProcessMessages rum machst?

Denke nicht!
Wenn ich schon eine Progressbar in meine Anwendung integriere dann sollte ich diese nicht durch ProcessMessages blockieren.

Zitat:

Wir wissen ja nicht einmal, ob er einen Thread benutzt oder nicht.
Das hat nichts mit einem Thread zu tun.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz