![]() |
Komponente zur Laufzeit erzeugen und events setzen? [TEIL2]
da der mod meinte das meine zweite frage aus dem anderen thread nich zum thema passt, aber mir kein anderes thema einfiel, weils ser wohle zum thema passt, stelle ich die frage nun nocheinmal! der mod is ja off und ich suche dringend ne antwort, also hier nochmal:
Delphi-Quellcode:
@meflin, ja hatte da einen fehler gehabt...
procedure onConnect(Sender: TObject);
begin // wie greife ich auf die aufrufende irccompo zu? end; procedure test; var stringlist : Tstringlist; begin stringlist := Tstringlist.Create; stringlist.AddObject('name1',TIdIRC.Create(Form1)); tidirc(stringlist.Objects[0]).OnConnect := onConnect; stringlist.Free; end; ist der aufruf so nun korrekt? wie greife ich in der procedure onconnect; nun auf die aufrufende componente zu? Sender:TObject habe ich vom event der irccompo übernommen! danke |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
Delphi-Quellcode:
procedure TForm.onConnect(Sender: TObject);
begin // wie greife ich auf die aufrufende irccompo zu? (Sender as TidIrc).<Eigenschaft> end; procedure TForm.test; var stringlist : Tstringlist; begin stringlist := Tstringlist.Create; stringlist.AddObject('name1',TIdIRC.Create(Form1)); tidirc(stringlist.Objects[0]).OnConnect := onConnect; //Warum StringListe? Nimm doch besser einen dyn Array stringlist.Free; /7In diesem fall schlecht! Fahr mal mit einem Auto, was du verschrottet hast. end; |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
Nungut. Du rufst das Free immernoch gleich auf nachdem du die Instanzen erstellst. Damit hast du nichts von ihnen, da sie gleich nach dem erstellen wieder im Nirvana landen. Das Free gehört ins OnClose deiner Anwendung!
In der Prozedure müsstest du auf die aufrufende Instanz über self.Blubb zugreifen können oder :gruebel: btw wurde das Thema nicht geschlossen weil die Frage nicht zum Thema passte sondern weil man generell nur eine Frage pro thread stellen soll ;) |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
Zitat:
Zitat:
Zitat:
Zitat:
TIdIRC (Sender) sollte Dich Deinem Problem näher bringen. Hope it helps onlinekater [Edit] Wo ist der rote Kasten? [/Edit] |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
sry, aber mir wiederstrebt es einfach, ein neuen thread zu eröffnen, vorallem wenn die fragen doch irgendwie zusammenhängen. vorallem wissen die threadleser direkt, wo ich hänge und was ich schon alles gemacht habe, bei nem neuen thread mussich alles wieder von neuem erklären...
aber nun gut, ich werd das gleich wennich daheim binn ausprobieren! vielen dank |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
du kannst ja in dem neuen Thread einen Link auf diesen setzen mit dem Hinweis das sich die Frage darauf bezieht. Letzendlich haben auch recht viele Fragen in dem Forum etwas mit Delphi zu tun. Trotzdem ist dies keine Rechtfertigung alle Fragen die man hat in den gleichen Beitrag zu packen.
|
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
moin!
habs jetzt mal mit einer klasse versucht, aber irgendwie funktionierts nicht.
Delphi-Quellcode:
das blöde ist, in der zeile mit der zuweisung, "FIRCConn.OnMessage := FOnMessage;" gibts beim compilieren nen fehler: "[Pascal Error] UnitTBot.pas(57): E2009 Incompatible types: 'method pointer and regular procedure'"
unit UnitTBot;
interface uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdIRC, IrcBlowfish, UnitTChannel, Windows, Forms; type TBot = class (TObject) private FIRCConn : TIdIRC; public procedure Connect(); constructor Create(); destructor Destroy; end; implementation procedure Delay(Milliseconds: Integer); //.... kennt ihr sicher ;) Constructor TBot.Create; begin //nochnix end; procedure FOnMessage(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String); var text : String; begin text := Content; end; procedure TBot.Connect; begin FIRCConn := TIdIRC.Create(nil); FIRCConn.OnMessage := FOnMessage; FIRCConn.Username := 'hust'; FIRCConn.Nick := 'checkkx'; FIRCConn.Host := 'localhost'; FIRCConn.Port := 6667; FIRCConn.Connect; Delay(5000); FIRCConn.Join('#test'); end; destructor TPreBot.Destroy; begin if FIRCConn.Connected then FIRCConn.Quit(''); FIRCConn.Free; inherited Destroy; end; end. kann mir da jemand weiterhelfen? danke |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
Muß auch ne Methode sein keine Procedure:
Delphi-Quellcode:
procedure TBot.FOnMessage(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel;
|
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
hm, passt, jetz wirds compiliert, hab im privateteil noch den procedure-kopf eingesetzt, aber ich verstehe nicht, wieso das nun funktioniert! worin liegt da der unterschied? kannste mir das noch erklären?
danke |
Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
Eventhandler-Properties sind als Methodenzeiger implemnetiert und nicht als Prozedurenzeiger.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 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