[Delphi]Wskaźnik na procedure |
![]() ![]() |
[Delphi]Wskaźnik na procedure |
czw, 08 cze 2006 - 14:58
Post
#1
|
|
![]() Guru Grupa: Super użytkownicy Postów: 730 Dołączył: pią, 28 paź 05 Nr użytkownika: 13 Gadu-Gadu: 4806677 |
Mam problem jak zadeklarować wskaźnik na jakąś procedure a potem wywołać ją posługując się wskaźnikiem ponieważ nie bardzo mi wychodzi.
-------------------- |
|
|
|
czw, 08 cze 2006 - 15:47
Post
#2
|
|
|
ahaha Grupa: Super użytkownicy Postów: 733 Dołączył: śro, 05 paź 05 Skąd: a nie z kąd Nr użytkownika: 4 Gadu-Gadu: 5199034 |
Na przykład tak:
Delphi procedure JakasProc ; begin ShowMessage('unit1') ; end ; procedure TForm1.Button2Click(Sender: TObject); var procka : procedure ; begin procka := @JakasProc ; // ustawiamy wskaźnik procka ; // wywołujemy procedurę end; |
|
|
|
czw, 08 cze 2006 - 15:53
Post
#3
|
|
![]() Guru Grupa: Super użytkownicy Postów: 730 Dołączył: pią, 28 paź 05 Nr użytkownika: 13 Gadu-Gadu: 4806677 |
Rzeczywiście działa, dziwne bo wydawało mi się, że tak próbowałem i mi się coś pluł kompilator ale nie ważne już
-------------------- |
|
|
|
pią, 09 cze 2006 - 00:14
Post
#4
|
|
|
Archon Grupa: Moderatorzy Postów: 1,868 Dołączył: pią, 28 paź 05 Skąd: Wieża Archona Nr użytkownika: 10 Gadu-Gadu: posiadam |
w przypadku wskaznika na metode w objekcie masz jeszczeprocedureof object,more-> F1 ;)
-------------------- |
|
|
|
pon, 25 sty 2010 - 20:24
Post
#5
|
|
|
Pomocna dłoń Grupa: Super użytkownicy Postów: 261 Dołączył: sob, 22 wrz 07 Skąd: Szczecin Nr użytkownika: 899 Gadu-Gadu: 478088 |
Sorki że odgrzebuje stary temat, ale czy Toster lub ktoś inny mógłby podać przykład jak mam użyć
procedure of object dla procedury, ktora ma parametry? Nie dogoolowałem się do tego. A chcę - w Ekspert Commanderze, ze źródeł z "KŚ Eksperta", ktory modyfikuje w ramach ćwiczeń dla siebie na maksa uprościc zdarzenie OnDblClick dla ListView. Teraz są dwa osobne, a ja chcę zrobić jedno, w zależności od tego na jakim ListView klikamy lub naciskamy klawisze - Lewym lub Prawym. Czy by to zrobić trzeba kombinować tak jak poniżej czy jest możliwość ustawienia wskaźnika na procedurę z parametrami dla obiektu dziedziczącego po formatce? Prosił bym o przykładowy kod, bo póki co to zrobiłem jedną procedurę z parametrem dodatkowym TListView, podajemy w nim na którym to z ListView mamy operować, a proceudra sprawdza czy jest to lewy ListView, czy prawy. Jednak z pewnością da się inaczej. Tylko właśnie pytanie jak wywołąć procedure of object z parametrem??? Delphi type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public procedure Cosik(S : string); end; var Form1 : TForm1; type TOdForm1 = class(TForm1) public S : string; procedure Ble; end; implementation {$R *.dfm} procedure TOdForm1.Ble; begin Form1.Cosik(S); end; procedure TForm1.Cosik(S : string); begin ShowMessage(S); end; procedure TForm1.Button1Click(Sender: TObject); var A : TOdForm1; begin A := TOdForm1.Create(Self);; A.S := 'lalala'; A.Ble; end; end. -------------------- Pozdrawiam: olesio
|
|
|
|
pon, 25 sty 2010 - 20:30
Post
#6
|
|
|
Archon Grupa: Moderatorzy Postów: 1,868 Dołączył: pią, 28 paź 05 Skąd: Wieża Archona Nr użytkownika: 10 Gadu-Gadu: posiadam |
Nie jestem pewien czy pisze na temat, ale moze o to chodzi:
Delphi TCos = class procedure cosTam(i: integer); end; TJakasProcka = procedure(i:integer) of object; procedure TCos.cosTam(i: integer); begin ShowMessage(IntToStr(i)); end; var prc: TJakasProcka; cl: TCos; begin cl := TCos.create; prc := cl.cosTam; //albo @cl.cosTam pisze z dyni prc(10); FreeAndNil(cl); prc(11); //suprajs wciaz dziala end; -------------------- |
|
|
|
pon, 25 sty 2010 - 22:43
Post
#7
|
|
|
Pomocna dłoń Grupa: Super użytkownicy Postów: 261 Dołączył: sob, 22 wrz 07 Skąd: Szczecin Nr użytkownika: 899 Gadu-Gadu: 478088 |
Dziękuję - działa ok. Dokładnie to chodziło mi o coś takiego jak poniżej. I mam nadzieję, że ten
wątek przyda się jeszcze jakimś polskim programistom Delphi, bo łatwo można go wygooglować. Delphi //... type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public procedure CosTam(I : integer); end; var Form1 : TForm1; implementation {$R *.dfm} procedure TForm1.CosTam(I : integer); begin ShowMessage(IntToStr(I)); end; procedure TForm1.Button1Click(Sender: TObject); type TJakasProcka = procedure(I : integer) of object; var Prc : TJakasProcka; begin Prc := CosTam; Prc(10); end; //... -------------------- Pozdrawiam: olesio
|
|
|
|
pią, 29 sty 2010 - 12:49
Post
#8
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
Witam.
Temat spadł mi z nieba. Jakby jeszcze była możliwość zamiany Stringa na procedurę lub funkcję, coś w stylu Delphi var S: String; begin S:= 'Dodaj'; if JesliIstniejeProcedura(S) then begin ZamieńStringaNaProcedure; WywołajProcedureZParametermLubBez; end; Przy czym wywołanie już jest zrobione brakuje tylko konwersji. Chodzi mi bardziej o jakieś uniwersalne rozwiązanie a nie o: Delphi if S='Dodaj' then Dodaj(1,2); |
|
|
|
pią, 29 sty 2010 - 19:42
Post
#9
|
|
|
Archon Grupa: Moderatorzy Postów: 1,868 Dołączył: pią, 28 paź 05 Skąd: Wieża Archona Nr użytkownika: 10 Gadu-Gadu: posiadam |
-------------------- |
|
|
|
wto, 02 lut 2010 - 08:52
Post
#10
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
A ja myślałem że to nie możliwe. Wielkie dzięki
|
|
|
|
![]() ![]() |
|
Wersja Lo-Fi | Aktualny czas: środa, 08 wrzesień 2010 - 13:40 |