![]() |
Progressbar updated nicht
Hi @ all.
Folgendes Problem: Ich habe nach der Anleitung hier ![]() 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! |
Re: Progressbar updated nicht
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. |
Re: Progressbar updated nicht
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:
Ist wie gesagt unverändert...
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;
Code:
var
Form1: TForm1; usercancel: Boolean = False;
Code:
...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 .
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;
Code:
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.
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; C ya! |
Re: Progressbar updated nicht
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:
dadurch wird auf jeden Fall - bei einem erfolgreich abgeschlossenem Download das Gauge auf 100 gesetzt.
BINDSTATUS_ENDDOWNLOADDATA:
begin Form1.Label1.Caption := 'Download wurde beendet...'; [color=red]Form1.Gauge1.Progress := 100;[/color] end; Wenn es dann immernoch nicht geht, dann hast du doch irgendwo 'nen Fehler drin. |
Re: Progressbar updated nicht
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! |
Re: Progressbar updated nicht
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 |
Re: Progressbar updated nicht
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 :D |
Re: Progressbar updated nicht
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!
|
Re: Progressbar updated nicht
Ruf mal nach dem Setzen der neuen Position die Methode Refresh oder Repaint auf.
|
Re: Progressbar updated nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 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