![]() |
Objekte zur laufzeit erstellen und NEUE events zuordnen
Hi,
ich habe ein problem. Ich habe mir eine Unit gemacht die soll vollkommen "alleine" laufen. Also nix von Form1 wissen. Objecte mit z.b. obj:=Tobj.Create erstellen klappt alles. Nun habe ich aber ein Object dem ich ein event zuordnen müsste und ich weiss nicht wie. Es sind keine Objecte die irgendwie sichbar sind. Also keine Buttons oder sowas. Wie das geht weiss ich. Sowas wird auch an jeder ecke beschrieben. Da die Unit keine Form besitzt stehe ich hier im moment auf dem schlauch. In der "MainUnit" klappt das einwanfrei. Da sind die proceduren ja oben im object (Form1) drinne. Wäre fein wenn mir mal einer auf die sprünge helfen könnte.... Vielen dank im voraus |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Es müßen einach nur "Methoden" sein,
also kannst du dir in deiner Unit irgendeine Verwaltunsklasse erstellen und im Initialization-Abschnitt ein Objekt davon instantiieren. Deine Methoden legst du nun in diese Klasse und kannst sie dann über das Objekt deinen Ereignissen zuweisen. |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Du musst deinem Object einen OnClick-Handler-Methode verpassen und dann dort, wo du es brauchst bzw. eben Zugriff darauf hast das OnClick-Event der Methode zuweisen:
Delphi-Quellcode:
TDeinObject = class(...)
public procedure OnClickHandler(Sender: TObject); end; { In deiner Form-Unit erzeugst du wohl eine Instanz deines TDeinObject und dort musst du dann auch die Zuweisung des Event-Handlers macht: } var do : TDeinObject; procedure TForm1.Button1Click(Sender: TObject); begin do := TDeinObject.Create(...); Button2.OnClick := do.OnClickHandler; end; |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Generell kannnst du das so machen:
Zuerst hier die Klasse, die das Event auslöst
Delphi-Quellcode:
Und jetzt die Klasse, die das Event implementiert (heißt das so?!):
type
TMeinEvent = procedure(Sender: TObject; Parameter: Integer) of Object; TMeineAusloesendeKlasse = class(TBla) private fMeinEvent: TMeinEvent; public OnMeinEvent: TMeinEvent read fMeinEvent write fMeinEvent; procedure IrgendEineProzedureDieDasEventAusloest; end; procedure TMeineAusloesendeKlasse.IrgendEineProzedureDieDasEventAusloest(); begin if Assigned(fMeinEvent) then fMeinEvent(self, 17); end;
Delphi-Quellcode:
type
TMeineKlasse = class(TFoo) private fAndereKlasse: TMeineAusloesendeKlasse; procedure AndereKlasseHatEventAusgeloest(Sender: TObject; Parameter: Integer); public constructor Create(); end; constructor TMeineKlasse.Create(); begin fAndereKlasse := TMeineAusloesendeKlasse.Create; fAndereKlasse.OnMeinEvent := AndereKlasseHatEventAusgeloest; end; procedure TMeineKlasse.AndereKlasseHatEventAusgeloest(Sender: TObject; Parameter: Integer); begin showmessage('Here we go!'); end; |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Ersmtal tausend dank. Aber ich glaube ich peil das grad nicht. Hier mal ein beispiel...
Delphi-Quellcode:
EDIT: Ups, da hab ich nicht ausgepasst. Post überschnitten. Ich war die ganze zeit am antworten :oops:
unit FTP;
interface uses clTcpClient, clFtp,clCertificateStore, clCertificate, ComCtrls,Classes; implementation uses SysUtils,IniFiles; procedure CheckCert; begin `statement` end; {CheckCert} procedure DoFTP(FName:String); var Source :TclFtp; begin Source:=TclFtp.Create(nil); Source.OnVerifyServer:=CheckCert; <-- dort schimpft er rum, das die sachen nicht passen [snip] Source.Free; end; Nochmal vielen dank. Ich versuch das mal umzusetzten. |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Ufffffff,
ist das kompliziert. Wenn man sich mal den ASM-Code ansieht schreibt er nur den pointer auf die routine ins objekt (Also Objectadr.+$64). Aber damit man das "sauber" durch den compiler bekommt muss man so einen aufwand treiben??? Das hätte ich nicht gedacht. Kein wunder das ich wie Ochs vorm Berg da stehe. Anhand meines Codes dachte ich "naja wird wohl nur irgendwo deklariert werden müssen"... Da ihr nun wisst was ich genau meine bleibt die vorgehensweise??? |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Die Vorgehensweise ist, dass du um CheckCert und DoFTP eine Klasse baust. Hilft dir sicherlich auch in anderen Sachen weiter.
|
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Hallo DelTurbo,
Zitat:
Dein Beispiel für die Clever Internet Suite müßte nun so aussehen:
Delphi-Quellcode:
Das ganze dann noch mit Konstruktor und Destruktor versehen und die Klasse entsprechend instanzieren. Überlichweise würde man das Source Objekt als Feld der Klasse deklarieren, im Konstruktor das Source Objekt erzeugen und entsprechend im Destruktor freigeben.
unit FTP;
interface uses clTcpClient, clFtp, clCertificateStore, clCertificate, ComCtrls, Classes; type TMeineKlasse = class(TObject) private public procedure CheckCert; procedure DoFTP(FName:String); end; implementation uses SysUtils, IniFiles; procedure TMeineKlasse.CheckCert; begin `statement` end; {CheckCert} procedure TMeineKlasse.DoFTP(FName:String); var Source: TclFtp; begin Source := TclFtp.Create(nil); Source.OnVerifyServer := CheckCert; // jetzt passt das hier, falls die Parameter sonst stimmen Source.Free; end; Als Tipp für ein gutes Einsteigertutorial zu Methoden in Delphi / ObjectPascal: ![]() Viele Grüße, Assertor |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Ui,
vielen vielen dank. Damit sollte ich nun zurecht kommen. Gruss Suchbegriffe: Objekte zur Laufzeit erstellen event zuordnen ohne Form |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 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 by Thomas Breitkreuz