Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komponente zur Laufzeit erzeugen und events setzen? [TEIL2] (https://www.delphipraxis.net/75557-komponente-zur-laufzeit-erzeugen-und-events-setzen-%5Bteil2%5D.html)

alienous 21. Aug 2006 12:26


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:
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;
@meflin, ja hatte da einen fehler gehabt...
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

mkinzler 21. Aug 2006 12:31

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;

Meflin 21. Aug 2006 12:34

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 ;)


TBx 21. Aug 2006 12:37

Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
 
Zitat:

Zitat von alienous
da der mod meinte das meine zweite frage aus dem anderen thread nich zum thema passt,

das hat SirThornberry nicht gesagt, er hat nur darauf hingewiesen, dass pro Threat nur eine Frage erlaubt ist

Zitat:

Zitat von alienous
stelle ich die frage nun nocheinmal!

so war das ja auch gedacht ...

Zitat:

Zitat von alienous
der mod is ja off ...

das ist nun ziemlich daneben. Der Mod macht hier nur seine Arbeit. Das erneute Stellen der Frage ist ok, die Art und Weise finde ich ziemlich daneben.

Zitat:

Zitat von alienous
wie greife ich in der procedure onconnect; nun auf die aufrufende componente zu?
Sender:TObject habe ich vom event der irccompo übernommen!

über den Sender. Dieser sollte die aufrufende Komponente enthalten.

TIdIRC (Sender) sollte Dich Deinem Problem näher bringen.

Hope it helps

onlinekater

[Edit]
Wo ist der rote Kasten?
[/Edit]

alienous 21. Aug 2006 13:52

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

SirThornberry 21. Aug 2006 15:17

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.

alienous 22. Aug 2006 18:31

Re: Komponente zur Laufzeit erzeugen und events setzen? [TEI
 
moin!

habs jetzt mal mit einer klasse versucht, aber irgendwie funktionierts nicht.

Delphi-Quellcode:
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.
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'"

kann mir da jemand weiterhelfen?

danke

mkinzler 22. Aug 2006 18:34

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;

alienous 22. Aug 2006 18:40

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

mkinzler 22. Aug 2006 18:49

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 11:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz