AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Progressbar updated nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Progressbar updated nicht

Ein Thema von HaCkAttaCk2001 · begonnen am 3. Apr 2004 · letzter Beitrag vom 4. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#1

Progressbar updated nicht

  Alt 3. Apr 2004, 10:21
Hi @ all.

Folgendes Problem: Ich habe nach der Anleitung hier http://www.delphipraxis.net/internal_redirect.php?t=75 ein Programm erstellt welches mir eine Datei herunterlädt. Das Herunterladen funktioniert einwandfrei, aber die ProgressBar rühert sich keinen Millimeter. Sie bleibt einfach auf 0 %, auch wenn der DL fertig ist.
Ein weiteres (kleineres) Problem ist, dass das Programm sich während des Downloads nicht schließen lässt (reagieren tut es aber noch).

Mir geht es vor allem um die Behebung des 1. Problems, denn ich hab keine Ahnung warum sich da nichts rühert.



C ya!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 10:28
Hai HaCkAttaCk2001,

erst einmal: "Herzlich Willkommen in der Delphi-PRAXIS".

Ohne etwas Quellcode von Dir wird es schwer sein den Fehler zu finden. Wenn es nicht zu viel ist post ihn doch einmal.
Wenn er zu groß ist hänge ihn einfach als Datei an dein Posting.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#3

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 10:41
Hi.

Danke für die Begrüßung .

Also der Code ist im Grunde genommen haargenau gleich wie im Beispiel, aber hier ist er nochmal :
In Reihenfolge mal alles das was ich als wichtig erachte:

Code:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Psock, NMHttp, inifiles, ComCtrls, UrlMon, ActiveX,
  Gauges;
Code:
type
  cDownloadStatusCallback = class(TObject,IUnknown,IBindStatusCallback)
  private
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
    function GetPriority(out nPriority): HResult; stdcall;
    function OnLowResource(reserved: DWORD): HResult; stdcall;
    function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall;
    function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
    function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
    function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall;
    function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
  end;
Ist wie gesagt unverändert...

Code:
var
  Form1: TForm1;
  usercancel: Boolean = False;
Code:
function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  case ulStatusCode of
    BINDSTATUS_FINDINGRESOURCE:
    begin
      Form1.Label1.Caption := 'Datei wurde gefunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_CONNECTING:
    begin
      Form1.Label1.Caption := 'Es wird verbunden...';
      if (usercancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_BEGINDOWNLOADDATA:
    begin
      Form1.Gauge1.Progress := 0;
      Form1.Label1.Caption := 'Der Download wurde gestartet...';
      if (UserCancel) then
      begin
        Result := E_ABORT;
        exit;
      end;
    end;
    BINDSTATUS_DOWNLOADINGDATA:
    begin
      Form1.Gauge1.Progress := MulDiv(ulProgress,100,ulProgressMax);
      Form1.Label1.Caption := 'Datei wird heruntergeladen...';
      if (UserCancel) then
      begin
        Result := E_ABORT; exit;
      end;
    end;
    BINDSTATUS_ENDDOWNLOADDATA:
    begin
      Form1.Label1.Caption := 'Download wurde beendet...';
    end;
  end;
  Application.ProcessMessages;

  Result := S_OK;
end;
...und das auch . Aber wie's aussieht arbeitet das MulDiv nicht... Wenn ich mir das ganze mit IntToStr(MulDiv....) mal testweise in ein Label schreiben lasse, dann steht dort einfach nur 0 .

Code:
  if Label3.Caption < Label5.Caption then //das ist eine Art Versionsabgleich
  begin
    Memo2.Lines.Add('>>Es wurde eine neue Version gefunden!');
    cDownStatus := cDownloadStatusCallBack.Create;
    try
      URLDownloadToFile(nil,'http://www.unsereherren.de/zombienation.wav','C:\test.wav',0,CDownStatus);
    finally
      cDownStatus.Free;
    end;
  end;
So, wie man sieht hab ich wirklich so gut wie gar nix geändert, weshalb es mich eigentlich wundert das die Gauge nicht funktionieren will.


C ya!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.181 Beiträge
 
Delphi 12 Athens
 
#4

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 11:01
Wen die Datei klein ist und ganz schnell runtergeladen wurde, oder in schon im IE-Cache war, also auch schnell da war, dann wird BINDSTATUS_DOWNLOADINGDATA unter umständen garnicht aufgerufen.

Erweiter mal BINDSTATUS_ENDDOWNLOADDATA:
Code:
    BINDSTATUS_ENDDOWNLOADDATA:
    begin
      Form1.Label1.Caption := 'Download wurde beendet...';
      [color=red]Form1.Gauge1.Progress := 100;[/color]
    end;
dadurch wird auf jeden Fall - bei einem erfolgreich abgeschlossenem Download das Gauge auf 100 gesetzt.

Wenn es dann immernoch nicht geht, dann hast du doch irgendwo 'nen Fehler drin.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#5

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 11:10
Hi.


Ich hatte mal zum Test eine ca. 200 MB große Datei laden lassen... die hatte ich auch vorher noch nie geladen... Irgendwann war sie dann tatsächlich fertig, aber die Statusbar hat sich nicht gerühert...

Edit: Fehler drin... hm. Ich hab das ja wirklich nur abkopiert und am Hauptteil überhaupt nichts geändert, da ich viel zu blöd für solche Geschichten bin . Ich freu mich wenn es funktioniert... Und der Kompiler meldet weder Fehler noch Warnungen oder ähnliches.


C ya!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.181 Beiträge
 
Delphi 12 Athens
 
#6

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 11:34
Schon mal geprüft, ob die Rückrufprozedur auch aufgerufen wird?

z.B. einen Haltepunkt reingesetzt, oder was anderes zum Test reingemacht?
Code:
function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  [color=red]case ulStatusCode of [/color]
    BINDSTATUS_FINDINGRESOURCE:
    begin
      Form1.Label1.Caption := 'Datei wurde gefunden...';
Code:
function cDownloadStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult;
begin
  [color=red]Form1.LabelTest.Caption := 'wurde aufgerufen'; [/color]
  case ulStatusCode of
    BINDSTATUS_FINDINGRESOURCE:
    begin
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#7

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 14:13
Hi.

Nun ja, alles in dieser Prozedur funktioniert, "Datei wurde gefunden...", "Es wird verbunden..." wird alles durchgegangen und abgearbeitet. Ich hab jetzt auch mal dort ne Überprüfung reingesetzt, wie in deinem Beispiel: funktioniert.

Das Problem ist ja nur das die Gauge nicht updated. Nur warum tut sie das nicht?!


C ya!

EDIT: Ich hab das ganze jetzt wieder rausgenommen und mir die HTTPGet-Komponente geholt . Funktioniert blendend
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 14:52
problem hatt ich auch mal. es gibt da von der progressbar aus ne procedure zum updaten. leider weis ich nimmer genau wie die heist. die könnte dein problem lösen!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Progressbar updated nicht

  Alt 3. Apr 2004, 15:10
Ruf mal nach dem Setzen der neuen Position die Methode Refresh oder Repaint auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#10

Re: Progressbar updated nicht

  Alt 4. Apr 2004, 11:08
Zitat von Luckie:
Ruf mal nach dem Setzen der neuen Position die Methode Refresh oder Repaint auf.
das wars
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:22 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