Czy jest moliwość wywołania procedury której nazwa jest w jakiejs zmiennej??
np.
var s : string;
begin
s:='close';
JakasProcedura(s);
end;
i efektem tego program wywoła procedure 'close',
mam nadzieje ze wszyscy wiedza o co mi chodzi :)
Czy jest moliwość wywołania procedury której nazwa jest w jakiejs zmiennej??
np.
var s : string;
begin
s:='close';
JakasProcedura(s);
end;
i efektem tego program wywoła procedure 'close',
mam nadzieje ze wszyscy wiedza o co mi chodzi :)
jesli by sie dalo to i tak bys musial sprawdzac poprawnosc tego co sie wpisuje.. bo nie mozna wywolac czegos czego nie ma.
czyli musialbys sprawdzac IF'ami.... a jesli i tak sprawdzac bedziesz to od razu daj:
if s='close' then close;
:)
A nie da sie zrobić na takiej zasadzie jak podałem w przykładzie??
Bo jeśli by coś takiego dało by sie zrobić to by to znacznie przyśpieszyło mi mój program.
W dziale artykuły jest tekst o tym.
// pod tytułem rzutowanie metod ;-) - detox
hehehe... nie wiem co jest, roie wszystko według artykułu i tak mi nie działa za każdym razem wyskakuje komunikat 'Nie ma takiej metody'. I nie wiem co robie źle.
Mam prośbe, czy mógby mi ktoś wysłać kod źródłowy z tym na maila destructions@interia.pl ??
Z góry dzięki
hehehe... nie wiem co jest, roie wszystko według artykułu i tak mi nie działa za każdym razem wyskakuje komunikat 'Nie ma takiej metody'. I nie wiem co robie źle.
Mam prośbe, czy mógby mi ktoś wysłać kod źródłowy z tym na maila destructions@interia.pl ??Z góry dzięki
Bo to nie wykrywa procedur, tylko metody. Do tego, o ile się nie mylę, tylko metody publikowane, gdyż korzysta to z RTTI (co do tego zdania nie jestem pewien, proszę mnie poprawiać :) )
Mozecie mnie olśnić co w tym jest źle:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TProcedureType = procedure of object;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure jeden;
procedure dwa;
procedure trzy;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.jeden;
begin
showmessage('1');
end;
procedure TForm1.dwa;
begin
showmessage('2');
end;
procedure TForm1.trzy;
begin
showmessage('3');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcRelay : TProcedureType;
begin
@ProcRelay:= MethodAddress(Edit1.Text);
if @ProcRelay= nil then
ShowMessage('Nie ma takiej metody')
else
ProcRelay;
end;
end.
to po prostu dziala tylko dla metod z zakladki Events komponentow - to dziala jak wpisze np Button2Click a na formie bede mial button2 i metode do obslugi klikniecia.
To może skorzystać z GetProcAddress() i jako moduł podać hInstance? Nie wiem, czy zadziała, ale można spróbować.
to po prostu dziala tylko dla metod z zakladki Events komponentow - to dziala jak wpisze np Button2Click a na formie bede mial button2 i metode do obslugi klikniecia.
Czyli jednak RTTI :) Metody zdarzeniowe są publikowane (pusblished), więc mają informację o typie (RTTI).
to po prostu dziala tylko dla metod z zakladki Events komponentow - to dziala jak wpisze np Button2Click a na formie bede mial button2 i metode do obslugi klikniecia.
Bzdura, wystarczy dać metody jeden, dwa, trzy do published i już...
No a o czym ja kurde mówie?? Chociaż może nie dosłownie, ale delikatnie sugeruję takie rozwiązanie. Zresztą to jest logiczne i wynika z tego co napisałem ja i moi przedmówcy. Ehh macie dzisiaj jakiś ciężki dzień :) Pewnie ten niedzielny obiad taki ciężkostrawny :)
Pewnie ten niedzielny obiad taki ciężkostrawny :)
u mnie jeszcze sobotni zalega :d
Pewnie ten niedzielny obiad taki ciężkostrawny :)
u mnie jeszcze sobotni zalega :d
Niektórzy to dobrze mają :) A ja głoduję :) Ściepka na obiad dla Brodnego!!!!!!