Skocz do zawartości

[Delphi] Zwracanie wskaźnika do metody w klasie


Force

Polecane posty

Temat wiele mówiący jest, no ale opiszę dokładniej :D

Chodzi mi o to, że mam klasę, ona ma metody i mam taki typ TTyp = procedure of object; I mam metodę w klasie która ma zwracać wskaźnik do innej metody z tej klasy (może być innego typu niż TTyp, jak coś się zrzutuje). I moje pytanie brzmi: jak takie coś się robi? bo wskaźnik do metody nie z klasy to używa się Addr, a tu nie da się

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Nie do konca czaje ale odpowiem na to co mi sie wydaje ze ci chodzi :)

 

type
  TProcType = procedure of object;

  TClassa = class
     procedure  AlaMaSiekiere;
  end;

var
  d: TProcType;
  c: TClassa;
begin
   c := TClassa.Create;
   d := @c.AlaMaSiekiere;
end;

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

ja mam takie coś:

 
type
 TGUIEventMethod = procedure of object;

 TVerySimpleGUIConnector = class(TObject,IGUIConnector)
 (..)

   function RequestProcedure(const ProcID: integer):TGUIEventMethod;
   procedure OnClickCancel(Sender : TGUIControl);
 end;

 (..)

function TVerySimpleGUIConnector.RequestProcedure(
 const ProcID: integer): TGUIEventMethod;
begin
 if ProcID=1 then
   Result := @self.OnClickCancel
 else
   Result := nil;
end;

i nie zaskakuje, daje: [Pascal Error] frmClient.pas(110): E2036 Variable required. Ale przypisanie nila działa :D

Edit:

z Result := @TGUIEventMethod(self.OnClickCancel) też nie działa aby nikt mi nie proponował :P

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

A no tak, zapomniałem napisać - to też nie działa, ten sam błąd. I błąd pokazuje na linijkę z "else", tak samo było wcześniej, ale zapomniałem dopisać

Edit:

zrobienie:

Result := OnClickCacel; daje

[Pascal Error] frmClient.pas(110): E2009 Incompatible types: 'Parameter lists differ'

zrobienie:

TGUIEventMethod(OnClickCancel) daje

[Pascal Error] frmClient.pas(110): E2089 Invalid typecast

 

Edit2:

wiem, że OnClickCancel ma inną deklarację niż TGUIEventMethod, ale o to mi właśnie chodzi

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Force baranku....

 

masz

TGUIEventMethod = procedure of object;

a definiujesz metode jako:

procedure OnClickCancel(Sender : TGUIControl);

 

mam cie zastrzelic ?

 

TGUIEventMethod = procedure(Sender : TGUIControl) of object;

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Udało się :D O to jak to zrobiłem:

 
function TVerySimpleGUIConnector.RequestProcedure(
 const ProcID: integer): TGUIEventMethod;
var
  a : TGUIOnClick;
begin
 if ProcID=1 then
 begin
   a := OnClickCancel;
   Result := TGUIEventMethod(a);
 end
 else
   Result := nil;
end;

gdzie TGUIOnClick ma typ taki jak OnClickCancel, jak widać nie zaawansowane

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...