|
unitUMain;
interface
uses
Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,
System.Classes,Vcl.Graphics,
Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Rtti,Vcl.StdCtrls;
type
TPersonel=class
private
FAd:string;
FYas:Byte;
public
Procedureprosedur1(ileti:string);
functionfonksiyon1(p1:string;p2:Integer):string;
propertyAd:stringreadFAdwriteFAd;
propertyYas:BytereadFYaswriteFYas;
end;
TForm1=class(TForm)
lbMethodlar:TListBox;
lbOzellikler:TListBox;
lbAlanlar:TListBox;
Label1:TLabel;
Label2:TLabel;
Label3:TLabel;
lbParametreler:TListBox;
Label4:TLabel;
btnProcedureCagir:TButton;
btnfonksyion1Cagir:TButton;
procedureFormCreate(Sender:TObject);
procedurelbMethodlarDblClick(Sender:TObject);
procedurebtnProcedureCagirClick(Sender:TObject);
procedurebtnfonksyion1CagirClick(Sender:TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1:TForm1;
personel:TPersonel;
rttiContext:TRttiContext;
rttiType:TRttiType;
method:TRttiMethod;
methodParametresi:TRttiParameter;
ozellik:TRttiProperty;
alan:TRttiField;
implementation
{$R *.dfm}
{
bildigimiz prosedr
}
procedureTPersonel.prosedur1(ileti:string);
begin
ShowMessage(ileti);
end;
{ bildigimiz fonksiyon.
Arife tarif ne hacet :)
}
functionTPersonel.fonksiyon1(p1:string;p2:Integer):string;
begin
Result:=p1+' '+IntToStr(p2);
end;
{ fonksiyon1 dinamik olarak ?ir }
procedureTForm1.btnfonksyion1CagirClick(Sender:TObject);
var
personel:TPersonel;
sonuc:TValue;
parametreler:arrayofTValue;
begin
{ Parametreler hazırlanıyor }
SetLength(parametreler,2);
parametreler[0]:='İsmail Kocacan';// p1 parametresi
parametreler[1]:=2011;// p2 parametresi
personel:=TPersonel.Create;
sonuc:=rttiType.GetMethod('fonksiyon1').Invoke(personel,parametreler);
FreeAndNil(personel);
ShowMessage(sonuc.ToString);
end;
{ procedure1 dinamik olarak çağırılıyor }
procedureTForm1.btnProcedureCagirClick(Sender:TObject);
var
personel:TPersonel;
parametre:TValue;
begin
personel:=TPersonel.Create;
parametre:='Güzel Olacak Güzel;
rttiType.GetMethod('prosedur1').Invoke(personel,parametre);
FreeAndNil(personel);
end;
procedureTForm1.FormCreate(Sender:TObject);
begin
{ Record' dan bir referans olustur }
rttiContext:=TRttiContext.Create;
{ Referans personel nesnesinin tipini aliyriz }
rttiType:=rttiContext.GetType(TPersonel);
{ Methodlari okuyoruz }
formethodinrttiType.GetMethodsdo
begin
lbMethodlar.Items.Add(method.Name);
end;
{ özellikleri okuyoruz }
forozellikinrttiType.GetPropertiesdo
begin
lbOzellikler.Items.Add(ozellik.Name);
end;
{ Field'ları okuyoruz }
foralaninrttiType.GetFieldsdo
begin
lbAlanlar.Items.Add(alan.Name);
end;
end;
procedureTForm1.lbMethodlarDblClick(Sender:TObject);
{ seçili methodun parametleri okunuyor }
var
seciliMethod:string;
begin
seciliMethod:=lbMethodlar.Items[lbMethodlar.ItemIndex];
method:=rttiType.GetMethod(seciliMethod);
lbParametreler.Clear;
formethodParametresiinmethod.GetParametersdo
begin
lbParametreler.Items.Add(methodParametresi.Name+':'+
methodParametresi.ParamType.ToString);
end;
end;
end.
|