wywołanie procedury ze zmiennej

0

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 :)

0

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;

:)

0

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.

0

W dziale artykuły jest tekst o tym.

// pod tytułem rzutowanie metod ;-) - detox

0

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 [email protected] ??

Z góry dzięki

0

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 [email protected] ??

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ć :) )

0

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.

0

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.

0

To może skorzystać z GetProcAddress() i jako moduł podać hInstance? Nie wiem, czy zadziała, ale można spróbować.

0

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).

0

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ż...

0

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 :)

0

Pewnie ten niedzielny obiad taki ciężkostrawny :)

u mnie jeszcze sobotni zalega :d

0

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!!!!!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1