![]() |
klassenfremde ereignisse weitergeben
Hallo Listers,
sorry für den nicht ganz so sinnigen Betreff. Ich habe folgendes Problem, und brauch mal 'ne Denkhilfe. Ich bin dabei eine Komponente zu entwickeln, die u.a. Dateien aus dem Internet downloaden kann. Der Download geschicht mittels der Indy-Komponenten, hier konkret mit der Methode Get der Klasse TIdHTTP. Diese Methode lädt eine Datei aus dem Internet herunter und löst während des Downloads ein Ereignis namens OnWork aus, um sich beispielsweise anzeigen zu lassen, wieviele Bytes schon runtergeladen sind. Dieses Ereignis möchte ich an das Formular, welches meine Komponente benutzt, weitergeben. Defininiere ich meine Komponente als Nachfahr der Klasse TIdHTTP ist alles schön, ich abe das Ereignis, und das war's. Ich möchte aber nicht alle Attribute, die TIdHTTP zur Verfügung stellt, in meiner Klasse haben, deshalb ist sie vom Typ TComponent. Wie kann ich aber nun dem aufrufenden Formular dieses OnWork-Ereignis zur verfügung stellen? Für jeden Tip wäre ich echt dankbar. Viele Grüße Marco |
Re: klassenfremde ereignisse weitergeben
Hi,
na weiterreichen... Du definierts in deiner Komponente ein Ereignis OnWork, welches sich der Benutzer auf eine Ereignisprozedur setzen kann. Desweiteren baust Du eine Behandlungsroutine für das Indy OnWork in deine Klasse ein, und rufst darin dein Event auf. Im Constructor- wo du wohl auch die Indy createst, setzt du das Event entsprechend auf deine Behandlungsroutine. Hab jetzt keine Lust es in Quellcode zu schreiben, ich hoffe Du verstehst was ich meine. :-D Gruss Thomas |
Re: klassenfremde ereignisse weitergeben
Hallo,
Zitat:
Delphi-Quellcode:
TDownloadFortschritt = procedure (Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer) of object; .... TMeineKomponente = Class (TComponent) { private deklarationen } fIdHTTP: TIdHTTP; fOnDownloadFortschritt: TOnDownloadFortschritt; Zitat:
Delphi-Quellcode:
Wie sieht denn jetzt hier welche Behandlungsroutine aus????
procedure TMeineKomponente.Execute;
begin ... fIdHTTP.Get (url, fs); // fs ist'n filestream ... Zitat:
Viele Grüße Marco |
Re: klassenfremde ereignisse weitergeben
Hi!
Ich hab mal was hier hingeschrieben, das könnte helfen...
Delphi-Quellcode:
type
TDownloadFortschritt = procedure (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer) of object; TForm1 = class(TForm) private MeineKomponente: TMeineKomponente; procedure StarteDownload; procedure MeineKomponenteDownloadFortschritt(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); end; TMeineKomponente = class (TComponent) { private deklarationen } private FIdHTTP: TIdHTTP; FOnDownloadFortschritt : TDownloadFortschritt; // du hattest TOnDownloadFortschritt procedure IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); public constructor Create; property OnDownloadFortschritt: TDownloadFortschritt read FOnDownloadFortschritt write FOnDownloadFortschritt ; end; var Form1: TForm1; implementation procedure Form1.StarteDownload; begin // Komponente fertig machen und sowas... MeineKomponente.OnDownloadFortschritt = MeineKomponenteDownloadFortschritt; MeineKomponente.Execute; end; procedure Form1.MeineKomponenteDownloadFortschritt(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin // Hier haste alles in deiner Form jetzt ;-) end; procedure TMeineKomponente.Execute; begin FIdHTTP.OnWork := IdHTTPWork; FIdHTTP.Get(url, fs); // fs ist'n filestream end; procedure TMeineKomponente.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin if Assigned(FOnDownloadFortschritt) then FOnDownloadFortschritt(NamenKenneIchNicht); end; |
Re: klassenfremde ereignisse weitergeben
Hallo an alle,
vielen herzlichen Dank für die raschen Antworten. Joa, jetzt hat's geschnackelt. Ich hab nach was viel komplizierterem gesucht. Nu läuft alles, außer, daß beim Download meine Form einfriert, obwohl TIdAntiFreeze mit dabei ist, aber das ist 'n anderes Thema. Nochmal danke und viele Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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