![]() |
Delphi-Version: 6
Problem mit TDownloadURL
Hallo,
ich versuche mit meinem Code eine Datei aus dem Internet herunterzuladen:
Delphi-Quellcode:
Das Herunterladen funktioniert, aber wenn ich den OnDownloadProgress zuweise, dann macht der ExecuteTarget eine Exception 'Invalid Enum Value'.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,ExtActns, StdCtrls, ComCtrls; type TForm1 = class(TForm) ProgressBar1: TProgressBar; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure URL_OnDownloadProgress (Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: String; var Cancel: Boolean) ; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.URL_OnDownloadProgress; begin ProgressBar1.Max:= ProgressMax; ProgressBar1.Position:= Progress; end; procedure TForm1.Button1Click(Sender: TObject); const URL='http://www.sdr-kits.net/DG8SAQ/VNWA-installer.exe'; Dest= 'd:\VNWA-installer1.exe'; var dl: TDownloadURL; begin dl := TDownloadURL.Create(self); try dl.URL := URL; dl.FileName := Dest; //dl.OnDownloadProgress := URL_OnDownloadProgress; //ExecuteTarget cashes if uncommented dl.ExecuteTarget(nil); //this downloads the file dl.Free; except dl.Free; end; end; end. ??? |
AW: Problem mit TDownloadURL
|
AW: Problem mit TDownloadURL
Zitat:
|
AW: Problem mit TDownloadURL
Schau dir mal die vorgegebenen Parameter des verwendeten (und von mkinzler verlinkten) Events an und vergleiche diese mit den Parametern deiner Ereignismethode.
|
AW: Problem mit TDownloadURL
Die Signatur der Methode anpassen.
Delphi-Quellcode:
procedure TForm1.URL_OnDownloadProgress (Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: String; var Cancel: Boolean);
|
AW: Problem mit TDownloadURL
Stimmt doch überein!?
Meine Deklaration:
Delphi-Quellcode:
Die vom Link:
procedure URL_OnDownloadProgress
(Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: String; var Cancel: Boolean);
Delphi-Quellcode:
TDownloadProgressEvent = procedure (Sender: TDownLoadURL; Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: String; var Cancel: Boolean) of object;
Bin ich blind? |
AW: Problem mit TDownloadURL
Zitat:
|
AW: Problem mit TDownloadURL
Nein, auch bei der Implementation muss man diese angeben. Denn man könnte die Methode auch überladen.
|
AW: Problem mit TDownloadURL
Unter Delphi XE kann ich den Fehler nicht reproduzieren.
|
AW: Problem mit TDownloadURL
Zitat:
Auf meinem Delphi6 läuft das jedenfalls fehlerfrei:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } procedure Add(i,j: Cardinal; var k: Cardinal); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Add; begin k:=i+j; end; procedure TForm1.Button1Click(Sender: TObject); var x: Cardinal; begin Add(1,2,x); Label1.Caption:=inttostr(x); end; end. |
AW: Problem mit TDownloadURL
Nein, in Implementation müssen die Parameter+Result nicht unbedingt angeben werden (außer es handelt sich um überladene Methoden),
aber für die Lesbarkeit des Codes isses schon irgendwie besser. Schau doch mal in deinem Delphi nach, wie TDownloadProgressEvent deklariert ist. Kann sein, daß die es inzwischen umgebaut haben. (D6 ist ja schon ein klein bissl älter) Gut, die VCL-Quellcodes fehlen dir, aber eventuell steht es ja in der OH und dann gibt es auch noch das Code-Insight. Jedenfalls stimmt deine Parametersignatur nicht mit der des Events deines Delphis überein. Dort scheint sogar ein ENUM in der Signatur vorzukommen, was er bei uns nicht mehr tut. An welcher Stelle, bzw. bei welchem Parameter, steht denn genau der Cursor, nachdem der Compiler gemekert hat? |
AW: Problem mit TDownloadURL
Nochmal zum ursprünglichen Problem mit OnDownloadProgress:
In Delphi7 Personal funktioniert mein Code. In Delphi6 Personal tritt der oben beschriebene Fehler auf. In meiner Onlinehilfe steht leider nichts über TDownloadURL. |
AW: Problem mit TDownloadURL
Nur nochmal genau:
Das Kompilieren klappt, aber beim Aufruf (laufenden Programm) knallt es? Passiert es auch, wenn du den Code in einem Event auskommentierst? Aber auch nochmal grob überlegt: Kann es sein, daß dieses Event asynchron, also in einem Thread, aufgerufen wird? Wenn ja, dann solltest du unbedingt den Zugriff auf die VCL synchronisieren. [edit] Zu Delphi 7: Da stimmt die Signatur auch mit der aus unserer Hilfe überein. D6 hab ich nicht. |
AW: Problem mit TDownloadURL
|
AW: Problem mit TDownloadURL
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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