当前位置:主页>销售管理软件> 列表

如何枚举程序中所有的窗体? 找进销存电子表格

库存管理软件版1楼: 用Application.Findcomponent好像只能找到有实例的窗体,但是不能找到只有Class,还没有实例化的窗体,我想枚举出本程序中所有窗体,用StringList.AddObject(名称,类型)保存起来,谁有办法?
200分,小小意思,不成敬意

2楼: 没有实例化的窗体在程序中是没有这个对象的,所有程序在运行期是找不到的。
再就是TFORM生成的对象是引用类型,生成的对象其实就是一个指针,所以建议
用TLIST,把对象指针保存起来便于管理(我以前这样用过)。 如速达财务软件单机版

3楼: TLIST保存起来是可以的,用TStringList还更方便,这都是一个道理
不过,都要手工向其中添加,我想要的是做出类似于dede和dunit中那种连没有实例化的Class都找得到,这两个软件都只有部分源码,关键部分都是用dcu提供的,没有pas,够狡猾的阿

4楼: 我问的问题可能会者不难

5楼: 樓主可能是對窗口權限管理才出現這個問題。
如果真的是這樣,不建議用這樣做。這樣太麻煩或不方便。

6楼: 你不妨把已经存在的都 事先装进去。 这样好像麻烦。 真不知道那个函数可以获得所有工程窗体。。。。

库存管理软件版7楼: EnumModules可以列出来使用过哪些包


不知道哪个函数可以枚举出来所有的Class,然后再比较是否是TForm

8楼: 不明白你说的意思

9楼: 用 Screen 来找,
for i:=0 to Screen.Forms.Count-1 do
begin
//Screen.Forms[i].Name //这个也是实例化了的,不对好象
end;

10楼: 估计要用 结构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;

11楼: RegisterClass,RegisterClasses注册那就用FindClass找就很方便了,但是,这样就失去了我问这个问题的意义了

12楼: dunit里面好多都是汇编,可以研究一下 如进销存电子表格

13楼: 接受答案了.