5,388
社区成员
发帖
与我相关
我的任务
分享
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
mo1: TMemo;
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
procedure say(str: string);
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
uses
Rtti;
procedure TForm3.btn1Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
begin
mo1.Clear;
for t in ctx.GetTypes do
mo1.Lines.Add(t.Name);
end;
procedure TForm3.btn2Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
m: TRttiMethod;
begin
mo1.Clear;
t := ctx.GetType(TForm3);
for m in t.GetMethods do
mo1.Lines.Add(m.Name);
end;
procedure TForm3.btn3Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
f: TRttiField;
begin
mo1.Clear;
t := ctx.GetType(TButton);
for f in t.GetFields do
mo1.Lines.Add(f.Name);
end;
procedure TForm3.btn4Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
m: TRttiMethod;
V: TValue;
begin
t := ctx.GetType(TForm3);
m := t.GetMethod('say');
V := TValue.From<string>('123');
m.Invoke(TForm3, V);//此处报错Invalid class typecast.
end;
procedure TForm3.say(str: string);
begin
mo1.Clear;
mo1.Lines.Add(str);
end;
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
mo1: TMemo;
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
procedure say(str: string);
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
uses
Rtti;
procedure TForm3.btn1Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
begin
mo1.Clear;
for t in ctx.GetTypes do
mo1.Lines.Add(t.Name);
end;
procedure TForm3.btn2Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
m: TRttiMethod;
begin
mo1.Clear;
t := ctx.GetType(TForm3);
for m in t.GetMethods do
mo1.Lines.Add(m.Name);
end;
procedure TForm3.btn3Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
f: TRttiField;
begin
mo1.Clear;
t := ctx.GetType(TButton);
for f in t.GetFields do
mo1.Lines.Add(f.Name);
end;
procedure TForm3.btn4Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
m: TRttiMethod;
V: array of TValue;
begin
t := ctx.GetType(TForm3);
m := t.GetMethod('say');
SetLength(V, 1);
V[1] := TValue.From<string>('123');
m.Invoke(TForm3, V);//此处报错Invalid class typecast.
end;
procedure TForm3.say(str: string);
begin
mo1.Clear;
mo1.Lines.Add(str);
end;
end.