RTTI Invoke / Stringden prosedür çağırma hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

RTTI Invoke / Stringden prosedür çağırma hk.

Mesaj gönderen cengaver »

Forumda araştırdığım kadarıyla RTTI ile ilgili procedure invoke konusunda verilen örnekler parametresiz prosedürleri kapsıyor, bunun parametreli halini nasıl yapabilirim? Yani RTTI ile farklı bir formdaki parametreli bir prosedürü nasıl çalıştırabilirim?

Amacım şu; Bir string içine kod yazacağım. Bu kod da sadece bir prosedürü çağırırken kullandığımız diyalektiği barındıracak. Yani şunun gibi bir şey yapmak istiyorum;

Kod: Tümünü seç

   BirProsedur(aParametre: Integer; bParametre: String);
   ...
   RunMethod('   BirProsedur(15, ''ali'')  ');   // ki böyle olması bence daha kullanışlı olur
   ...
   gibi...
Not 1: viewtopic.php?f=19&t=30474 bir örnek barındırıyor ama yeterli değil, biraz daha gelişmişi lazım aslında...
Not 2: FastScript'i denedim. Fastscript nesnesinde bir kod yazdığınızda bunu çalıştırıyor. Fakat benim derdim kendi unitlerimde yazdığım prosedürleri çalıştırabilmek. Bu noktada fastscript'e kendi prosedürlerini de tanıtabilirsin dediğinizi duyar gibiyim ama onda da tüm prosedürleri tek tek AddMethod'tan geçirmeniz gerekiyor.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: RTTI Invoke / Stringden prosedür çağırma hk.

Mesaj gönderen thelvaci »

Aşağıdaki koddan istifade edebilirsiniz.

Kod: Tümünü seç

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    SpinEdit1: TSpinEdit;
    procedure Button1Click(Sender: TObject);
  private

  public
    { Public declarations }
    procedure X(const AValue : Integer; const BValue : String);
  end;

var
  Form1: TForm1;

implementation
uses
  Rtti;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ctx : TRttiContext;
  typ : TRttiType;
  mtd : TRttiMethod;
begin
  ctx := TRttiContext.Create;

  try
    typ := ctx.GetType(Self.ClassInfo);

    if typ <> nil then
    begin
      mtd := typ.GetMethod('X');

      if mtd <> nil then
        mtd.Invoke(Self, [SpinEdit1.Value, Edit1.Text]);
    end;
  finally
    ctx.Free;
  end;
end;

procedure TForm1.X(const AValue: Integer; const BValue: String);
begin
  ShowMessage('AValue:' + AValue.ToString() + '-BValue:' + BValue);
end;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: RTTI Invoke / Stringden prosedür çağırma hk.

Mesaj gönderen vkamadan »

Tuğrul hocam eline sağlık..
Volkan KAMADAN
www.polisoft.com.tr
Cevapla