Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 3.241 pregleda

Najnovija ↓

Cast procedure kao metod pointer? 12.11.2010. u 09:07 · pre 194 meseca #1
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!
Re: Cast procedure kao metod pointer? 12.11.2010. u 11:05 · pre 194 meseca #2
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.
Re: Cast procedure kao metod pointer? 12.11.2010. u 12:27 · pre 194 meseca #3
da, to znam
nego sam se pitao i par puta mi zatrebalo, da li mozda ipak moze i drugacije?
ali nisam nista uspeo.... :(
Re: Cast procedure kao metod pointer? 12.11.2010. u 14:07 · pre 194 meseca
izmenjeno 1 put, poslednji put X Files 12.11.2010. u 14:22
  1. X Files12.11.2010. u 14:22zapis iz teksta poruke
#4
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
Re: Cast procedure kao metod pointer? 12.11.2010. u 20:39 · pre 194 meseca #5
> 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;

Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Cast procedure kao metod pointer? 15.11.2010. u 10:42 · pre 194 meseca #6
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...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme