Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cast procedure kao metod pointer?

[es] :: Pascal / Delphi / Kylix :: Cast procedure kao metod pointer?

[ Pregleda: 2183 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gpedja_70
programer
Novi Sad, Srbija

Član broj: 224317
Poruke: 53
*.wobyhaus.co.rs.



+2 Profil

icon Cast procedure kao metod pointer?12.11.2010. u 08:07 - pre 163 meseci
Da li je moguce dodeliti obicnu proceduru eventu?

Npr:

Imam proceduru:

Code:
procedure Klikni(Sender: TObject);


koja je obicna procedura a ne metod

kako da dodelim tu proceduru kao onclick?

Code:
Button.OnClick := Klikni;
/// dobijem gresku: E2009 Incompatible types: 'method pointer and regular procedure'

ako uradim ovako:

Code:
Button.OnClick := TNotifyEvent(Klikni);
/// dobijem gresku: E2089 Invalid typecast

pozz!
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.adsl-a-1.sezampro.yu.



+1 Profil

icon Re: Cast procedure kao metod pointer?12.11.2010. u 10:05 - pre 163 meseci
Mislim da nije moguće jer vidim da se to obično rešava tako što se napravi mala klasa sa jednom takvom metodom i jedan objekat te klase upotrebi za event handler.
 
Odgovor na temu

gpedja_70
programer
Novi Sad, Srbija

Član broj: 224317
Poruke: 53
*.wobyhaus.co.rs.



+2 Profil

icon Re: Cast procedure kao metod pointer?12.11.2010. u 11:27 - pre 163 meseci
da, to znam
nego sam se pitao i par puta mi zatrebalo, da li mozda ipak moze i drugacije?
ali nisam nista uspeo.... :(
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Cast procedure kao metod pointer?12.11.2010. u 13:07 - pre 163 meseci
Zanimljivo.

U C++ Builderu (koji je 'ogranicen' Object Pascal-om i naravno zasnovan na VCL pravilima) je jedino bitno da se prototipovi (nase) funkcije i (event) metode slazu. Kasnije se vrsi najprostija dodela, bez ikakvog dodatnog kastovanja, kao sto si prirodno i sam pokusao.

Sada sam malo gledao po netu, i vidim da se to resava kao sto je "Milos D" rekao, promovisanjem funkcije u metodu klase. Naravno kasnije ide dodela.
Code:

type
  TYourClass=class(TObject);
    procedure GenericClick: TNotifyEvent;
  end;


Uglavnom sve identicna resenja:
http://delphi.about.com/cs/adptips2003/a/bltip1003_5.htm


[Ovu poruku je menjao X Files dana 12.11.2010. u 14:22 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Cast procedure kao metod pointer?12.11.2010. u 19:39 - pre 163 meseci
> koja je obicna procedura a ne metod
> kako da dodelim tu proceduru kao onclick?

Evo primera. BTW, zašto uopšte radiš tako nešto? Ako imaš button onda imaš i klasu kojoj taj button pripada.

Code:

function ProcedureToMethod(Owner: TObject; ProcAddr: Pointer) :TMethod;
begin
  Result.Data := Owner;
  Result.Code := ProcAddr;
end;

procedure Klikni(Sender: TObject);
begin
  Form1.Caption := intToStr(GetTickCOunt);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Temp: TMethod;
begin
  Temp := ProcedureToMethod(Self, @Klikni);
  Button1.OnClick := TNotifyEvent(Temp);
end;


 
Odgovor na temu

gpedja_70
programer
Novi Sad, Srbija

Član broj: 224317
Poruke: 53
*.wobyhaus.co.rs.



+2 Profil

icon Re: Cast procedure kao metod pointer?15.11.2010. u 09:42 - pre 163 meseci
ovo izlgeda da radi!

Citat:
BTW, zašto uopšte radiš tako nešto?


ovde je button samo uzet kao primer,
a primena bi bila ako bih zeleo jedan isti event da se okida za vise razlicitih objekata, recimo neki dijalog za konfirmaciju ili tako nesto...
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Cast procedure kao metod pointer?

[ Pregleda: 2183 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.