![]() |
Statusbar bei Indy FTP
arbeite grad wieder an meinem FTP Client und habe das Problem das ich diesen Code in OnWorkBegin und OnWork einsetze:
Delphi-Quellcode:
Das Problem die ProgressBar (PG_DL) bewegt sich kein Stück wenn ich mit FTP.Get irgendetwas runterlade - irgendwie scheint es so als dass das Programm sowieso stoppt solange ich etwas herunterlade :shock:
procedure TForm1.FTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer); begin l.Caption := 'Download gestartet'; PG_DL.Max := AWorkCountMax; PG_DL.Position := 0; end; procedure TForm1.FTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin l.Caption := 'Download'; PG_DL.Position := AWorkCount; end; Wie umgehe ich das? |
keiner ne Idee? :(
|
Hallo,
schonmal mit ein paar App.ProccessMessages versucht? Grüsse, Daniel :hi: |
Hmm, es funktioniert nicht. Ich denke weil och ja mit einem Prozeduraufruf die Datei herunterlade und erst wenn dir Get Prozedur mir die Kontrolle zurück gibt kann ich ja sagen dass er die Messages verarbeiten soll.
Ich glaub ich muss mit nem Stream arbeiten oder mit Threads, obwohl ich mit Threads 0 Erfahrung habe :( |
Ruf mal nach jedem Neusetzen des Position die Methode Refresh der Progressbar auf.
|
So, denke ich habs gefunden - hatte heute mal n bissl Zeit in der Indyhilfe zu suchen.
Es gibt bei Indy ne Komponente namens AntiFreeze (d'Oh :wall: ), die setzt man wohl einfach mit aufs Formular und dann soll das ganze funzen, testen konnte ichs noch nicht aber spätestens heute Abend weiss ich obs das war. danke nochmal für die Hilfe |
Hy
ja es funktioniert hatte das gleiche problem vor 1 woche :roll: [edit=Daniel B]Doppelpost gelöscht. MfG Daniel B.[/edit] |
hmm ich hab keine ahnung von indy, könnt ihr mir sagen, wie man ne datei downloaden kann? das mit der statusanzeige weiss ich ja jetzt schon mal :)
|
Hallo,
Zitat:
Grüsse, Daniel :hi: |
@thema: habs mit dem freeze-teil da ausprobiert, geht aber net wirklich...
|
Re: Statusbar bei Indy FTP
Moin,moin.
War auch grad auf der Suche nach einer Statusanzeige für einen Download... So, ich dachte mir, einfach mal ich probier mal den Quelltext aus, der hier ganz am Anfang gepostet wurde und, tatsache bei mir funzte er zuerst auch net, habe aber den Fehler gefunden!!! Bei mir war nämlich die Variable AMaxCount = 0. Deshalb ist ja klar, dass die Progressbar nicht weiter läuft... Außerdem habe ich rausgefunden, dass der Wert AWorkCount beim Download die Anzahl der heruntergeladenen Bytes enthält. D.h. wenn man einfach
Code:
machen würde, wäre die Progressbar nach dem ersten Mal WorkCount ganz am Ende, oder aber immer noch leer :?: Hab des jetzt net ausprobiert... :wink: Habe also noch ein wenig dazu geproggt, damit die ProgressBar auch ungefähr das Richtige anzeigt, wäre hier aber auch noch über Verbesserungsvorschläge dankbar!
Progressbar1.position := AWorkCount
So, genug der Erklärung hier nun der Quellcode:
Delphi-Quellcode:
Die 32768 ist die Größe des Empfangs-Puffers. Achso was ich auch noch schnell loswerden wollte, habe nicht diese idfreeze- oder wie auch immer Komponente benutzt, klappt auch wunderbar ohne :wink:
procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer); begin ProgressBar1.Position := 0; end; procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); var n : longint; a : real; begin statusbar1.Panels[0].Text := inttostr(AWorkcount div 1000)+' kB'; {size in byte} n := size div 32768; {n = 100%} a := n / 100; a := round(a); if a > 1 then begin inc(b); if b >= a then begin ProgressBar1.Position := AWorkCount div 32768; ProgressBar1.Refresh; b := 0; end; end else begin ProgressBar1.Position := AWorkCount div 32768; ProgressBar1.Refresh; end; end; MFG Henrik :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 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