Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Formular friert beim FTP-Download ein! (https://www.delphipraxis.net/26772-formular-friert-beim-ftp-download-ein.html)

ickehausen 29. Jul 2004 08:04


Formular friert beim FTP-Download ein!
 
HI Leute,

ich möchte gern eine Datei (ca. 5MB groß, dadurch dauert der Download etwas länger) von einem FTP-Server downloaden. Das funktioniert auch, aber mein Formular friert dabei ein und erwacht erst wieder, wenn der Download komplett ist. Der ProgressBar bleibt leer. Ich habe neben dem IdFTP auch ein IdAntiFreeze auf meinem Formular, bewirkt aber nichts!

:wall:

Hier folgt der Code:
Delphi-Quellcode:
procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
  ProgressBar1.Position := 0;
end;

procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdFTP1.Host := 'ftp.domain.com';
  IdFTP1.Username := 'anonymous';
  IdFTP1.Password := '';
  IdFTP1.Connect;
  IdFTP1.ChangeDir('/');
  IdFTP1.Get('xyz.exe','C:\ttt\xyz.exe',true);
  IdFTP1.Quit;
  IdFTP1.Disconnect;
end;
Kann mir jemand helfen?

fkerber 29. Jul 2004 08:10

Re: Formular friert beim FTP-Download ein!
 
HI!

Herzlich Willkommen in der DP.

Mach vielleicht irgendwo ein Application.Processmessages rein.

Zur besseren Lesbarkeit: Es gibt hiuer sog. Delphi-Tags, einfach den gesamten Code markieren und oberhalb des Textfeldes auf den "Delphi-Code" Button klicken.
Zum Editieren des Beitrags ist oben rechts eine Schaltfläche ("Edit")

Ciao fkerber

Die Muhkuh 29. Jul 2004 08:13

Re: Formular friert beim FTP-Download ein!
 
Hi ickehausen,

erstmal Herzlich Willkommen in der DP. :dp:


So wie ich sehe verwendest du die Indy's. Da gibts eine Komponente names "IdAntiFreeze". Zufinden unter "Indy-Misc". Einfach auf die Form machen. Dann funtzt es.

Luckie 29. Jul 2004 08:13

Re: Formular friert beim FTP-Download ein!
 
Entweder packst du das ganze in einen separaten Thread oder du probierst mal diese Indy AntiFreeze Komponente aus.

fkerber 29. Jul 2004 08:14

Re: Formular friert beim FTP-Download ein!
 
Hi!

Zitat:

Zitat von ickehausen
Ich habe neben dem IdFTP auch ein IdAntiFreeze auf meinem Formular, bewirkt aber nichts!

:mrgreen:

Ciao fkerber

Luckie 29. Jul 2004 08:15

Re: Formular friert beim FTP-Download ein!
 
Ups. Ist es auch richtig eingestellt? Hast du mal an den Einstellungen etwas rumprobiert?

ickehausen 29. Jul 2004 08:20

Re: Formular friert beim FTP-Download ein!
 
Hi,

danke für die Tips, auch mit dem Delphi-Code, bin im Forum halt neu und außerdem kasser Delphi-Neuling. Jetzt habe ich in einem anderen Beitrag gelesen, dass ich beim AntiFreeze den Wert onlywhenidle auf false stellen muß. Das Formular friert nicht mehr ein, aber mein ProgressBar zeigt immer noch nichts an. Was mache ich flasch?

Delphi-Quellcode:
procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := AWorkCountMax;
  ProgressBar1.Position := 0;
end;

procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;

Luckie 29. Jul 2004 08:22

Re: Formular friert beim FTP-Download ein!
 
Lad mal eine größere Datei runter, mehrer MB die paar Kilobytchen sind ja schneller unter als du kucken kannst. Und ich nehme mal an du hast DSL. Mit Modem oder ISDN würde man aus Kostengründen so ein Projekt ja gar nicht erst anfangen. ;)

Die Muhkuh 29. Jul 2004 08:24

Re: Formular friert beim FTP-Download ein!
 
Zitat:

Zitat von Luckie
Lad mal eine größere Datei runter, mehrer MB die paar Kilobytchen sind ja schneller unter als du kucken kannst. Und ich nehme mal an du hast DSL. Mit Modem oder ISDN würde man aus Kostengründen so ein Projekt ja gar nicht erst anfangen. ;)

Was soll das heißen? Ich bin auch grad an einem FTP-Browser dran und hab auch nur ISDN.

ickehausen 29. Jul 2004 08:27

Re: Formular friert beim FTP-Download ein!
 
Hi Luckie,

ich brauche schon ein bis zwei Minuten um die 5 MB down zu loaden, trotz DSL. Der ProgressBar zeigt einfach nichts an!
Ich kann den Fehler jetzt aber eingrenzen; der Wert von AWorkCountMax ist immer 0!
:wall:

Luckie 29. Jul 2004 08:33

Re: Formular friert beim FTP-Download ein!
 
Zitat:

Zitat von Spider
Zitat:

Zitat von Luckie
Lad mal eine größere Datei runter, mehrer MB die paar Kilobytchen sind ja schneller unter als du kucken kannst. Und ich nehme mal an du hast DSL. Mit Modem oder ISDN würde man aus Kostengründen so ein Projekt ja gar nicht erst anfangen. ;)

Was soll das heißen? Ich bin auch grad an einem FTP-Browser dran und hab auch nur ISDN.

Das soll heißen, dass ich es mir docj zweimal überlegen würde so was zu programmieren, was ich nur online richtig teste kann. Wird vom Provider nach Zeit abgerechnet, dann kostet jede Minuten online testen Geld. Mit einer Flat oder einem Volumentarif wohl eher kein Problem.

@ickehausen:
Hast du die Ereignisse auch mit der Komponente im OH verbunden? Oder probier mal folgendes:
Code:
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
  [b]Progressbar1.Repaint;[/b]
end;

Die Muhkuh 29. Jul 2004 08:37

Re: Formular friert beim FTP-Download ein!
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Spider
Zitat:

Zitat von Luckie
Lad mal eine größere Datei runter, mehrer MB die paar Kilobytchen sind ja schneller unter als du kucken kannst. Und ich nehme mal an du hast DSL. Mit Modem oder ISDN würde man aus Kostengründen so ein Projekt ja gar nicht erst anfangen. ;)

Was soll das heißen? Ich bin auch grad an einem FTP-Browser dran und hab auch nur ISDN.

Das soll heißen, dass ich es mir docj zweimal überlegen würde so was zu programmieren, was ich nur online richtig teste kann. Wird vom Provider nach Zeit abgerechnet, dann kostet jede Minuten online testen Geld. Mit einer Flat oder einem Volumentarif wohl eher kein Problem.

Was meinst du warum ich nur Sonntags das teste? Weil es mich da nix kostet (Internet)

ickehausen 29. Jul 2004 08:44

Re: Formular friert beim FTP-Download ein!
 
Zitat:

@ickehausen:
Hast du die Ereignisse auch mit der Komponente im OH verbunden? Oder probier mal folgendes:
Code:
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
  [b]Progressbar1.Repaint;[/b]
end;

Ich habe mein letzten Kommentar zu spät geändert. Den Fehler habe ich eingegrenzt: Der Wert für AWorkCountMax wird mit 0 zurückgegeben. Klar dass der ProgressBar dann nichts anzeigen kann, wenn ProgressBar.Max := 0!!!!
Aber, warum bekomme ich null zurück?

Dark-L0rd 1. Aug 2004 10:48

Re: Formular friert beim FTP-Download ein!
 
Hi...

Der Source für die Statusbar war so schon richtig...:
Delphi-Quellcode:
procedure Tbg3.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
  ProgressBar1.Max := AWorkCountMax;
end;

procedure Tbg3.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;

procedure Tbg3.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position := 0;
end;
Hast du denn auch bei deinem idFTP1 die Ereignisse OnWorkBegin, OnWork und OnWorkEnd verlinkt?
Und ist das idAntiFreeze auch Aktiv?

ickehausen 2. Aug 2004 06:40

Re: Formular friert beim FTP-Download ein!
 
Zitat:

Zitat von Dark-L0rd
Hi...

Der Source für die Statusbar war so schon richtig...:
Delphi-Quellcode:
procedure Tbg3.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
  ProgressBar1.Max := AWorkCountMax;
end;

procedure Tbg3.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  ProgressBar1.Position := AWorkCount;
end;

procedure Tbg3.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position := 0;
end;
Hast du denn auch bei deinem idFTP1 die Ereignisse OnWorkBegin, OnWork und OnWorkEnd verlinkt?
Und ist das idAntiFreeze auch Aktiv?

HI, Dark-Lord,

vielen Dank für Dein Tip. Ich habe über das Wochenende die Lösung meines Problems gefunden. Ich bekamm immer den Wert 0 für die AWorkCountMax zurück. Jetzt habe ich in den Demos zu INDY die Lösung gefunden:

Delphi-Quellcode:
  private
    { Private-Deklarationen }
    BytesToTransfer: LongWord;
.
.
.
procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  if AWorkCountMax > 0 then ProgressBar1.Max := AWorkCountMax
  else ProgressBar1.Max := BytesToTransfer;
  ProgressBar1.Position := 0;
  label1.Caption := IntToStr(ProgressBar1.Max);
end;
Allen vielen Dank für Ihre Ratschläge.

:love:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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