AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi StatusBar anstatt Download-Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

StatusBar anstatt Download-Fenster

Ein Thema von djpaull · begonnen am 24. Apr 2008 · letzter Beitrag vom 25. Apr 2008
Antwort Antwort
djpaull
(Gast)

n/a Beiträge
 
#1

StatusBar anstatt Download-Fenster

  Alt 24. Apr 2008, 22:50
Servus Leute!

Bin immernoch an meinem Browser dran. Es geht um Download kleiner Dateien, in meinem Fall sind es (viele) Bilder. Ich habe den Download etwas automatisiert, d.h. das Programm lädt mir die Bilder aus einer Liste (ListBox) ins Verzeichniss XY. Problem:

1. Während des Downloads ist das ganze Programm nicht ansprechbar und
2. Ich wollte es so machen, dass das Programm
a) mir den jeweiligen Download und den dazu gehörigem Fortschrittsbalken (wie in der ProgressBar) in der StatusBar anzeigt
b) den Gesammtfortschritt azeigt. Sollte gehen, da die Anzahl der zuladenden Dateien bekannt ist (ListBox1.Items.Count oder so).

Code zu 1.

Delphi-Quellcode:
procedure TForm1.DownloadClick(Sender: TObject);
var
  d: String; //Ordner Name
  url,ziehl: pchar;
begin
  d:=getcurrentwb.LocationName;
  createdir('c:/'+d);
  for i := 0 to Listbox2.items.Count - 1 do
    begin
    url:=pchar(listbox2.Items.Strings[i]);
    ziehl:=pchar('c:/'+d+'/'+inttostr(i+1)+'.jpg');
    URLDownloadToFile(nil, url, ziehl, 0 , nil);
  end;
end;
Hat jemand ne Idee oder Erfahrung?

EDIT1

Habe das hier gefunden. Weiss aber nicht, wie mich das weiter bringen soll, bzw. wie ich das Ganze aufrufen soll. Ausserdem gibt es bei mir keine Komponente "TGauge" (TurboDelphi (Explorer-Version)). Aber hier entstehen wieder 2 Probleme: wie verlege ich z.B.  Form1.Gauge1.Progress := MulDiv(ulProgress,100,ulProgressMax); auf die StatusBar und wie funtioniert der Aufruf?
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

Registriert seit: 2. Feb 2007
260 Beiträge
 
Delphi 2007 Professional
 
#2

Re: StatusBar anstatt Download-Fenster

  Alt 25. Apr 2008, 01:10
Also ich denk mal zum thema "Anwedung reagiert nicht" solltest du dir mal Application.ProcessMessages ansehen.

zum 2. punkt:
du willst wirklich für jeden download eine Progressbar in der statusleiste haben? das passt da doch dann gar nicht alles rein oder?
eine für alles ist ja okay aber mehr? ich weiß nicht...
für alle würde ich einfach die gesamtanzahl bytes ermitteln und dann gucken wie viel du schon geladen hast. Wenn du es so machst, dass du guckst wie viele bilder schon geladenen wurden, wird die anzeige nämlich ein bisschen springen...

gruß
Fabian E.
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#3

Re: StatusBar anstatt Download-Fenster

  Alt 25. Apr 2008, 01:53
Hey das mit Application.ProcessMessages; funzt - einfach vor dem "Donwload" einsetzen.
Delphi-Quellcode:
procedure TForm1.DownloadClick(Sender: TObject);
var
  d: String;
  url,ziehl: pchar;
  begin
  d:=getcurrentwb.LocationName;
  createdir('c:/'+d);
  for i := 0 to Listbox2.items.Count - 1 do
    begin
    Application.ProcessMessages; // Hier Einsetzen - Dann schmiert das Prog nicht ab :-)
    url:=pchar(listbox2.Items.Strings[i]);
    ziehl:=pchar('c:/'+d+'/'+inttostr(i+1)+'.jpg');
    URLDownloadToFile(nil, url, ziehl, 0 , nil);
  end;

end;
Zitat:
zum 2. punkt:
du willst wirklich für jeden download eine Progressbar in der statusleiste haben? das passt da doch dann gar nicht alles rein oder?
eine für alles ist ja okay aber mehr? ich weiß nicht...
Nicht für Jeden eine, sondern eine ProgressBar, die aber nach dem eine Datei fertig ist, den Fortschritt der nächsten anzeigt. Und eine ProgressBar für dem gesammten Download.
Zitat:
für alle würde ich einfach die gesamtanzahl bytes ermitteln und dann gucken wie viel du schon geladen hast.
Ja gut... schon... nur ich weiss nicht wie?
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#4

Re: StatusBar anstatt Download-Fenster

  Alt 25. Apr 2008, 02:25
Ich habs.
Zuerst den Code hier wiefolgt angepasst:

Delphi-Quellcode:
...
    BINDSTATUS_FINDINGRESOURCE:
    begin
      form1.StatusBar2.Panels[1].Text := 'Datei wurde gefunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_CONNECTING:
    begin
      form1.StatusBar2.Panels[1].Text := 'Es wird verbunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_BEGINDOWNLOADDATA:
    begin
      Form1.progressbar1.Position := 0;
      form1.StatusBar2.Panels[1].Text := 'Der Download wurde gestartet...';
      if (UserCancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_DOWNLOADINGDATA:
    begin
      Form1.progressbar1.Position := MulDiv(ulProgress,100,ulProgressMax);
      form1.StatusBar2.Panels[1].Text := 'Datei wird heruntergeladen...';
      if (UserCancel) then
      begin
        Result := E_ABORT; exit;
      end;
    end;
    BINDSTATUS_ENDDOWNLOADDATA:
    begin
      form1.StatusBar2.Panels[1].Text := 'Download wurd beendet...';
    end;
...
Somit brauche ich auch keine Gauge mehr.
Hier ist mein Aufruf:

Delphi-Quellcode:
procedure TForm1.DownloadClick(Sender: TObject);
begin
  dl;
end;

procedure tform1.DL;
var
  d: String;
  url,ziehl: pchar;
  cDownStatus : cDownloadStatusCallback;
  begin
  cDownStatus := cDownloadStatusCallBack.Create;
  d:=getcurrentwb.LocationName;
  createdir('c:/'+d);
  for i := 0 to Listbox2.items.Count - 1 do
    begin
    Application.ProcessMessages;
    url:=pchar(listbox2.Items.Strings[i]);
    ziehl:=pchar('c:/'+d+'/'+inttostr(i+1)+'.jpg');
    URLDownloadToFile(nil, url, ziehl, 0 , CDownStatus);
  end;
end;
Jetzt nur noch den Gesammtbalken.
Zitat:
einfach die gesamtanzahl bytes ermitteln und dann gucken wie viel du schon geladen hast
. Hmm... Wie war das noch mal
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: StatusBar anstatt Download-Fenster

  Alt 25. Apr 2008, 06:13
Hallo,

Da du viele kleine Bilder herunterladen möchtest, könnte man den Fortschritt
anhand der Total / heruntergeladenen Bilder berechnen.

d.h z.B bei Total 50 Bildern die Progressbar.Max auf 50 setzen und bei jedem heruntergeladenen Bild die Position der Progressbar um eins erhöhen.

Die andere Methode wäre, wie schon geschrieben:
Zitat:
einfach die gesamtanzahl bytes ermitteln und dann gucken wie viel du schon geladen hast
Thomas
  Mit Zitat antworten Zitat
djpaull
(Gast)

n/a Beiträge
 
#6

Re: StatusBar anstatt Download-Fenster

  Alt 25. Apr 2008, 07:22
Danke!
Zitat:
d.h z.B bei Total 50 Bildern die Progressbar.Max auf 50 setzen und bei jedem heruntergeladenen Bild die Position der Progressbar um eins erhöhen.
Hab so gemacht.
  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 06:58 Uhr.
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