[ reiser @ 17.08.2005. 02:39 ] @
Pretpostavimo da pravim konzolnu aplikaciju za IRC chatovanje i za to koristim Indy komponentu IdIRC. Posto, jeli, ne postoji forma da "nalepim" komponentu, moram da u uses listu dodam IdIRC unit i da sve parametre setujem iz koda. OK, sve to podesim i konektujem se na server.
I sad, recimo da zelim da kad dobijem voice na serveru (+v), program posalje odgovor 'Hvala za voice'. Medjutim, kad kreiram jedan TIdIRC objekat, kako da mu dodelim da poziva recimo funkciju VoiceGive svaki put na OnVoice event ?
[ Srki_82 @ 17.08.2005. 07:22 ] @
Napravis proceduru VoiceGive sa parametrima koje treba da ima OnVoice event (pogledaj help, tamo ti pise) i onda u kodu napisi
Code:
IRCClient.OnVoice := VoiceGive;
[ reiser @ 17.08.2005. 18:48 ] @
Da to radi ne bih ovde postavio pitanje ;)

Code:

procedure aa(parametri);
begin
//
end;

begin
IRC.OnVoice := aa;
end.


Znaci procedura aa je identicna po parametrima kao i OnVoice. Kad pokusam da kompajliram delphi javi : "Incompatible types: 'method pointer and regular procedure'"....
[ Srki_82 @ 17.08.2005. 19:06 ] @
Procedura aa mora da se nalazi u nekoj klasi. Dakle... ne moze
Code:
procedure aa(parametri);
begin
//
end;

begin
IRC.OnVoice := aa;
end.

nego mora
Code:
type TForm1 = class(TForm)
  .
  .
  .
  procedure aa(parametri);
end;

procedure TForm1.aa(parametri);
begin
//
end;

begin
IRC.OnVoice := Form1.aa;
end.

Probao sam i radi 100%
[ reiser @ 17.08.2005. 20:42 ] @
Hvala
[ reiser @ 17.08.2005. 21:12 ] @
Ehhh opet nece :(

Code:

uses
  Windows, IdIRC;

type
  TB = class
         IRC : TIdIRC;
         procedure OnVoice(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
         procedure Connect;
       end;

var
  b   : TB;

procedure TB.OnVoice(Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
begin
  MessageBox(0, 'asdasd', nil, mb_OK);
end;

procedure TB.Connect;
begin
  IRC := TIdIRC.Create(nil);
  IRC.Host := 'irc.balcan.net';
  IRC.Port := 6667;
  IRC.Nick := 'test_nick';
  IRC.Username := '34345';
  IRC.RealName := 'asdasdsad';
  IRC.Connect;
  IRC.Join('#testkanal', '');
  IRC.OnVoice := OnVoice;
end;

begin
  b := TB.Create;

  b.Connect;

  repeat
  until 1 <> 1;
end.


Evo, to je kod koji sam sklepao na brzinu. Sve se nalazi u klasi i opet nece... Dobro se konektuje na kanal i kad programu dam voice, OnVoice procedura se ne poziva uopste. Gde gresim ? Ako hoces mogu da ti posaljem ove Indy komponente neophodne za ovaj kod, pa testiraj. Hvala jos jednom.
[ Srki_82 @ 18.08.2005. 18:02 ] @
Ne znam sta da ti kazem... meni radi ok.
Probaj da izmedju repeat i until stavis Application.ProcessMessages... mozda to pomogne.
[ reiser @ 20.08.2005. 00:23 ] @
Jej, radi :) Hvala care ;>