如何遍历窗体中Public下的所有过程,或Function,返回过程名,或过程的Pointer(100分)

  • 主题发起人 主题发起人 jxhdy2001
  • 开始时间 开始时间
J

jxhdy2001

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟有看过以前网上的一些资料,在TypInfo单元有函数可以得到,但不知道是哪个
好像又没有帮助,所以就不好意思来麻烦各位大侠了?
 
用GetPropInfo函数

函数,过程,属性必须是publish出来的。
 
我的意思是在我不知道窗体中有哪些过程
但我想用一个循环把它遍历出来
to Adnil
可不可以帖出代码,谢谢?
 
窗口上面放一个memo和一个button

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses TypInfo;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
PropInfo: PPropInfo;
TempList: PPropList;
i, j, iCount: integer;
sProperty, sValue: string;
Comp: TComponent;
begin
Comp := Self;
iCount := GetPropList(Comp, TempList);
for j := 0 to iCount - 1 do
begin
PropInfo := TempList^[j];
Memo1.lines.add(PropInfo^.Name);
end;
FreeMem(TempList);
end;

end.
 
to Adnil:
谢谢, 刚才用你给的代码只遍历出控件自有的属性和事件,
如果我在窗体的Public中写了一个自写义的Button的单击事件,好像取不到
 
function GetPropList(AObject: TObject; out PropList: PPropList): Integer;
 
private,protected,public中的都不行的,没有RTTI信息。
 
如果我知道Public中声明的过程名呢?可不中以动态的赋值给某个控件
我是想把过程名保存在数据库中,在动态创建控件时,赋给控件的事件
 
这个过程名也得是属性才行
published
property FunctionA: TNotifyEvent: read FFunctionA write FFunctionA;
end;

然后才能通过名称'FunctionA'来进行操作,而非published出来的过程在编译时会用
符号来代替名称。
 
谢谢支持!
结贴啦!!!!
 
后退
顶部