请问怎么把对象里面的属性与方法读出来呢.急.分不够再加.(200分)

  • 主题发起人 主题发起人 hzjone
  • 开始时间 开始时间
H

hzjone

Unregistered / Unconfirmed
GUEST, unregistred user!
看不太懂.
是不是说清楚些比较好.
帮你顶.
 
方法一:
// 读属性
procedure TForm1.btn1Click(Sender: TObject);
var
I, Count : Integer;
PropInfo : PPropInfo; // typinfo.pas
TempList : PPropList;
k : TTypeKind;
begin
Count := GetPropList(wwDBGrid1, TempList);
if Count > 0 then
try
for I := 0 to Count - 1 do
begin
PropInfo := TempList^;
if (PropInfo^.PropType^.Kind) in [tklstring] then
begin
lst1.Items.Add(propinfo^.Name);
end;
end;
finally
FreeMem(TempList);
end;
end;

// 读方法有点难度,让高手写吧:)

方法二:
1。将对象转为文本,再分解出属性和事件,只能得到一对象事件挂上的方法(过程),
自定义的看不到。
object Form2: TForm2
Left = 214
Top = 103
Width = 696
Height = 480
Caption = 'Form2'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate //
PixelsPerInch = 96
TextHeight = 13
object btn1: TButton
Left = 312
Top = 232
Width = 75
Height = 25
Caption = 'btn1'
TabOrder = 0
OnClick = btn1Click
end
end

方法三:
参考函数
MethodName();
MethodAddress()

方法四:生成一个MAP文件对应EXE
编译的时候增加“Linker------->Map file 选择Detailed”
Map files struct:
offset = AV - $401000
offset = 448994 - 401000 = 47994
===============================================
Start Length Name Class
0001:00000000 00048480H .text CODE
0002:00000000 00000C24H .data DATA
0002:00000C24 0000023DH .bss BSS

// 單元名稱
Detailed map of segments
0001:00038500 0000F0A4 C=CODE S=.text G=(none) M=Forms ACBP=A9
0001:000475A4 00000C8C C=CODE S=.text G=(none) M=Unit1 ACBP=A9 475A4~~48230 // VA: 47994
0001:00048230 0000024D C=CODE S=.text G=(none) M=Project1 ACBP=A9

Address Publics by Name
0002:00001088 .1
0002:000010E8 .1

// 函數名稱
Address Publics by Value
0001:000477F4 TForm1.btn1Click
0001:00047964 TForm1.btn2Click // 47994
0001:000479B0 TForm1.btn3Click

// 源碼行號. Line numbers for xxxx
Line numbers for Unit1(Unit1.pas) segment .text
67 0001:00047964 68 0001:00047970 69 0001:0004797F 70 0001:00047987
// 47994
71 0001:0004798C 72 0001:00047999 77 0001:000479B0 78 0001:000479BC
79 0001:000479C9 94 0001:000479D0 95 0001:000479DF 96 0001:000479ED

===============================================
.計算偏移(offset)
offset = AV - $401000
 
(工程选项)Project Options-->Linker------->Map file 选择Detailed”
才能生成。MAP文件
 
"."啊。edit1.Text edit1.Color
 
hsgrass,再请教一下,我怎么样把读出来的属性名称,通过它对对象传值.
例如:MYCLASS.NAME 我读出NAME字符串后,想能过现在这个NAME定位到MYCLASS的NAME的属性,再进行赋值.
 
引用typinfo 单元。 它有属性, 对象, 变量方法列表的结构和获取方法。
 
接受答案,后面的问题解决了,..
 
后退
顶部