如何枚举程序中所有的窗体?(200分)

  • 主题发起人 主题发起人 versa
  • 开始时间 开始时间
V

versa

Unregistered / Unconfirmed
GUEST, unregistred user!
用Application.Findcomponent好像只能找到有实例的窗体,但是不能找到只有Class,还没有实例化的窗体,我想枚举出本程序中所有窗体,用StringList.AddObject(名称,类型)保存起来,谁有办法?
200分,小小意思,不成敬意
 
没有实例化的窗体在程序中是没有这个对象的,所有程序在运行期是找不到的。
再就是TFORM生成的对象是引用类型,生成的对象其实就是一个指针,所以建议
用TLIST,把对象指针保存起来便于管理(我以前这样用过)。
 
TLIST保存起来是可以的,用TStringList还更方便,这都是一个道理
不过,都要手工向其中添加,我想要的是做出类似于dede和dunit中那种连没有实例化的Class都找得到,这两个软件都只有部分源码,关键部分都是用dcu提供的,没有pas,够狡猾的阿
 
我问的问题可能会者不难
 
樓主可能是對窗口權限管理才出現這個問題。
如果真的是這樣,不建議用這樣做。這樣太麻煩或不方便。
 
你不妨把已经存在的都 事先装进去。 这样好像麻烦。 真不知道那个函数可以获得所有工程窗体。。。。
 
EnumModules可以列出来使用过哪些包
不知道哪个函数可以枚举出来所有的Class,然后再比较是否是TForm
 
不明白你说的意思
 
用 Screen 来找,
for i:=0 to Screen.Forms.Count-1 do
begin
//Screen.Forms.Name //这个也是实例化了的,不对好象
end;
 
估计要用 结构WNDCLASS 来找,它刚好就是找那些已经用RegisterClass注册的类。如果是TForm类型的,也必定先注册过了:

The WNDCLASS structure contains the window class attributes that are registered by the RegisterClass function.

typedef struct _WNDCLASS { // wc
UINT style

WNDPROC lpfnWndProc

int cbClsExtra

int cbWndExtra

HANDLE hInstance

HICON hIcon

HCURSOR hCursor

HBRUSH hbrBackground

LPCTSTR lpszMenuName

LPCTSTR lpszClassName

} WNDCLASS;
 
RegisterClass,RegisterClasses注册那就用FindClass找就很方便了,但是,这样就失去了我问这个问题的意义了
 
dunit里面好多都是汇编,可以研究一下
 
接受答案了.
 
后退
顶部