![]() |
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:
|
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Zitat:
Trotzdem vielen dank..... |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Hi,
ich habe noch eine frage zu objecten die zur laufzeit erstellt werden. Wenn ich ein objekt erstelle, wie sind dann die defaultwerte? Oder werden garkeine eingetragen? Wenn doch, sind es die werte die man hat, als wenn man das object neu auf Form1 legt? Wenn nicht, wie kann ich die defaultwerte zuordnen? Also wenn man es auf Form1 zieht sind ja diverse werte gesetzt. Wie bekomme ich die in mein object, das ich mit .Create erstellt habe? Muss man das "zu fuss" machen? Danke im voraus |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Defaultwerte?
Der Speicher für die Klasse wird mit NULLEN initialisiert ... genauso wie es bei globalen Variablen passiert. |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Hi,
war wohl zu allgemein gehalten meine frage. Sagen wir mal ich ziehe IdFTP auf die Form. Dann ist z.b. Port 21 voreingetragen. Oder bei clFtp. Nun war die frage ob ein z.b. clftp.Create oder IdFtp.Create auch beispielsweise den port 21 schon vorbelegt. Das mit dem Port ist nur ein beispiel. Es gibt ja noch mehr sachen. |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Einige Properties haben einen Default-Wert und dazu sollte auch dein Beispiel mit dem Port zählen. Also ja.
Die Defaultwerte sind in der jeweiligen Klasse definiert und sind identisch mit denen die definiert sind wenn man z.b. eine Komponente aufs Formular zieht. Falls du noch weitere Fragen haben solltest, soweit ich mich erinne...pro Thema einen Thread. Und zur Laufzeit erstellten Objekten ein Event zuweisen sollte ja abgehakt sein ;) MfG Alaitoc |
Re: Objekte zur laufzeit erstellen und NEUE events zuordnen
Zitat:
Vielen dank...... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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