![]() |
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:
Es gibt hier viele Einträge aus dem letzten Jahrzehnt aber leider keine Lösung.
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; Ich benutze Delphi 10.1 Berlin Hat jemand eine Idee woran das liegt. |
AW: Indy FTP mit Progressbar
Zitat:
versuche es mal so.
Delphi-Quellcode:
Die Progressbar wird nur dann aktualisiert wenn nötig.
Progress := AWorkCount;
if (ProgressBar.Position <> Progress) then ProgressBar.Position := Progress; das schont die Ressourcen und beschleunigt das zeichnen der Progressbar selbst. gruss |
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; |
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? |
AW: Indy FTP mit Progressbar
Es ist mein Programm. Warum willst Du das wissen.
|
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: ![]() |
AW: Indy FTP mit Progressbar
Zitat:
Diese sollte man nicht unterbrechen und nur aktualisieren wenn nötig. Zitat:
Das war aber auch nicht die frage. gruss |
AW: Indy FTP mit Progressbar
Zitat:
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:
Als Tod würde ich es nicht betrachten. Denn das ist es keinesfalls. |
AW: Indy FTP mit Progressbar
Zitat:
|
AW: Indy FTP mit Progressbar
Zitat:
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:
gruss |
AW: Indy FTP mit Progressbar
Application.ProcessMessages benötigt man teilweise gerade WEIL sich sonst die GUI nicht aktualisiert. :roll:
|
AW: Indy FTP mit Progressbar
Zitat:
Dann hast du ein Design technisches Problem in deinem code. Aber jeder wie er will. ;) Meine Programme freezen nicht. gruss |
AW: Indy FTP mit Progressbar
Zitat:
Was denkst du wie ich es mache? Genau so. Hat immer funktioniert und wird vermutlich noch ewig so funktionieren. Zitat:
@Daniel keine Ahnung was du mir sagen möchtest. ist ja aber auch egal. Ich halte mich jetzt raus aus diesem Thema hier. Man bekommt ja eh nur aufs Maul. |
AW: Indy FTP mit Progressbar
Oh, Oh Schande auf mein Haupt. Ich hatte doch tatsächlich diese Zeile im Code:
Delphi-Quellcode:
Kein Wunder das es nicht funktionierte. Dieser Fehler passiert mir nicht noch mal.
UpdaterFtp.OnWork := Nil;
|
AW: Indy FTP mit Progressbar
Hallo zusammen
Ja dieses Thema ist schon ziemlich alt, aber ich stehe nun auch vor diesem/einem ähnlichen Problem. ein Klick auf den Button "btnDownload" auf einem FireMonkey Download-Form sollte auf einem Android-Tablet folgendes machen: 1. btnDownload.Enabled := False 2. ausblenden eines Textes 3. dafür einblenden eines Fortschrittbalken 4. die Datei per HTTP-Get herunterladen (TIdHTTP.Get()) 5. während dem Download den Fortschrittsbalken nachführen Sämtliche Änderungen am GUI (en-/disablen und Fortschritt) werden aber nur nachgeführt, wenn Application.ProcessMessages aufgerufen wird. In vielen Posts wird jedoch von der Verwendung von ProcessMessages bei Android wehement abgeraten. Hat jemand einen Vorschlag, wie hier richtig vorzugehen ist? Ich dachte mir, dass Indy das von sich aus mittels Thread löst und ich diesen Vorgang nicht auch noch in einen anderen Prozess Packen muss. - Ist ProcessMessages doch richtig, oder wie kann man einen Refresh des GUI sonst noch auslösen (Refresh geht nicht)? - Wird ProcessMessages in einer späteren Delphi-Version evtl. nicht mehr unterstützt? Herzlichen Dank in die Runde Patrik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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