Witaj Gościu ( Zaloguj | Rejestruj )

 
Reply to this topicStart new topic
[Delphi]Wskaźnik na procedure
5corpio
post 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.


--------------------
Go to the top of the page
 
+Quote Post
Iskar
post 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;
 
Go to the top of the page
 
+Quote Post
5corpio
post 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ż biggrin.gif


--------------------
Go to the top of the page
 
+Quote Post
Toster
post 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 ;)


--------------------
Always Dark
Obrazek Obrazek Obrazek
Go to the top of the page
 
+Quote Post
olesio
post 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
Go to the top of the page
 
+Quote Post
Toster
post 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 tongue.gif
end;
 


--------------------
Always Dark
Obrazek Obrazek Obrazek
Go to the top of the page
 
+Quote Post
olesio
post 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
Go to the top of the page
 
+Quote Post
Integer
post 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);  
 
Go to the top of the page
 
+Quote Post
Toster
post 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



http://delphi.about.com/cs/adptips2004/a/bltip0204_3.htm


--------------------
Always Dark
Obrazek Obrazek Obrazek
Go to the top of the page
 
+Quote Post
Integer
post 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 smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: środa, 08 wrzesień 2010 - 13:40