Force Napisano Lipiec 2, 2008 Zgłoś Share Napisano Lipiec 2, 2008 Temat wiele mówiący jest, no ale opiszę dokładniej 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 More sharing options...
Toster Napisano Lipiec 2, 2008 Zgłoś Share Napisano Lipiec 2, 2008 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 /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Lipiec 2, 2008 Autor Zgłoś Share Napisano Lipiec 2, 2008 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 Edit: z Result := @TGUIEventMethod(self.OnClickCancel) też nie działa aby nikt mi nie proponował Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 2, 2008 Zgłoś Share Napisano Lipiec 2, 2008 Result := @OnClickCancel ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Lipiec 2, 2008 Autor Zgłoś Share Napisano Lipiec 2, 2008 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 More sharing options...
Toster Napisano Lipiec 2, 2008 Zgłoś Share Napisano Lipiec 2, 2008 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 /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Lipiec 2, 2008 Autor Zgłoś Share Napisano Lipiec 2, 2008 No właśnie o to mi chodziło, że metodą jest różna od zwracanej, ale mogę ją rzutować. Cóż, niestety Toster (no i Blind, ale go nie posłuchałem, wybacz) powiedział(eli), że się nie da, a tak to żyłem w przedwiadczeniu, że da się Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 2, 2008 Zgłoś Share Napisano Lipiec 2, 2008 Jesli sie da to bede dzwieczny za info, od razu mowie ze sztuczki z rzutowaniem na untyped i w druga oraz operacje na rekordzie TMethod sie nie licza Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Lipiec 2, 2008 Autor Zgłoś Share Napisano Lipiec 2, 2008 Udało się 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.