新增加Form之后,是默认创建的。
要是不默认创建Form,如何能在Application中遍历属于自己工程的所有Forms呢?
我看了Tappplication的帮助没有找到啊!
要是不默认创建Form,如何能在Application中遍历属于自己工程的所有Forms呢?
我看了Tappplication的帮助没有找到啊!
解决方案 »
- 跪求287K的Midas.dll
- 关于提示对话框的问题
- 在rave5.0中怎么样实现横的,竖的同时打印 200分求教
- 大家知道银行ATM系统是用什么工具开发的吗,有什么好的这方面的书吗
- 如何利用SHFileOperation函数实现直接删除,不放入回收站!!!
- 在clientdataset的oncdsCalcFields事件中这样赋值,是否会将记录的值存到数据库当中?
- 如何定义TSocketNotifyEvent的过程?
- 进销存 一般用先进先去还是移动加权平均法,先进先去和移动加权平均法怎么区别?该怎么用啊?
- 哪位大虾知道wise installer的下载地址?
- 怎样连接远程数据库?初学者100份求教...
- 不同数据库更新表多个字段问题
- TcxLookupComboBox 匹配的问题
前提是你创建form时采用以下方式
Frm := TFrm.Create(Application) ;
//而不是
Frm := TFrm.Create(nil) ;
我的意思并不是要找到那些被创建的Form,而是在只有MainForm的情况下,
Application对象就不能找到所有应该属于他自己的那些Form?
http://topic.csdn.net/t/20030828/13/2197652.html
但是直到接口并没有用。我一直觉得在工程文件中就可以找到所有的窗体实例(无论创建与否,因为delphi创建Form时,都默认增加一个该窗体类的实例作为全局变量),但是application运行之后也可以理解为是该工程的一个实例吧,看来还是找不到阿
日前,公司一个程序,存在浮动窗体。
我就是想着怎么遍历,一直耽搁了工程。
还是直接提供一个Form列表比较实在。
如果是关于TCustomForm的继承类的实例,一般在创建时都会调用TCustomForm.CreateNew,里面可以很清楚的看到这么一句
Screen.AddForm(Self);
所以,Application里没有的窗体也同样可以通过Screen.CustomFormCount/CustomForms遍历出来
i: integer;
f: TForm;
begin
ShowMessage(IntToStr(Screen.FormCount));
for i := 0 to Self.MDIChildCount - 1 do begin
f := Self.MDIChildren[i];
//todo
end;
end;
对于非MDI可以这样var
i: integer;
f: TForm;
begin
ShowMessage(IntToStr(Screen.FormCount));
for i := 0 to Screen.FormCount - 1 do begin
f := Screen.Forms[i];
//todo
end;
end;注:这种方式只能遍历所有自动创建的窗体(不包含Data Module)
我看到了TCustomForm.CreateNew,里面的Screen.AddForm(Self)这句话,但是既然是CreatNew方法里面的,那么在没有创建之前,是不会触发她的阿,更谈不上添加到Tscree了。那个只能找到已经存在于屏幕的窗体
感觉很像shift+F12那样调出所有的窗体类,一样,实在不行的话
我觉得遍历所有的窗体接口总可以吧?但是还没找到,再不行,就只能用列表保存了。
从链接器的角度看,如果你没有使用一个类,那么它会认为你没有使用这个类,就不会把链接它的rtti链,否则会让编译出来的文件变得非常臃肿。如果你既没有Create它,又没把类Add到list中,那么很遗憾,就算遍历映射到内存的code段,没有链接进来的照样还是没法找到
可能不确切 我是这么理解的