拜求:如何得到工程中的所有FORM? ( 积分: 200 )

  • 主题发起人 主题发起人 chencang
  • 开始时间 开始时间
C

chencang

Unregistered / Unconfirmed
GUEST, unregistred user!
工程中的所有FORM,不管是一运行就创建的还是调用的时候动态创建的,只要是设计时建立的FORM全部列出,最好体现层次关系,怎么循环得到啊?
 
工程中的所有FORM,不管是一运行就创建的还是调用的时候动态创建的,只要是设计时建立的FORM全部列出,最好体现层次关系,怎么循环得到啊?
 
for I := application.ComponentCount- 1 downto 0 do
begin
if application.Components is TForm then
begin
formName:=TForm(application.Components).name;
.........

end;
end;
 
做个TStrings。每个From生成时往里插,Free时从里面删除。
 
谢谢二位!
但是,二位没理解我的意思。
举个例子:
现在程序运行起来了,但是只有主窗体创建了,别的所有窗体都没有随程序运行而自动创建(都会在调用的时候动态创建)。就这个例子,子瑜的代码只能得到主窗体的名字(frmMain)!我现在要得到我在设计的时候建立的所有窗体(除了frmMain,还有form1、form2、form3...)。
 
就我看来你要实现这样的功能, 只用建立一张表保存你的Tform了。
要不然真的没法实现啊! 我个人看法。 也许后有高人能实现。
 
为了更清楚的说明我的意思,我把调用时动态创建窗体的代码贴出来,大侠一看就明白了:
procedure TfrmMain.N1Click(Sender: TObject);
begin
if not Assigned(Form1) then
Form1 := TForm1.Create(Application);
end;
朋友们帮忙啊!!
 
用一个TObjectList来存放窗体引用类。没有建立,程序是不知道你的工程里有多少窗体的。要你自己想办法,应该。
 
To:kk2000,
我就是要通过这样的功能遍历所有Form,以便写入数据表啊!手工一个个添加太残酷了!![:(]
 
好像没有办法,只有你先写进去!
 
如果你的TForm没有Create的话,又想全部遍历TForm。 还是那句话
不可能的。
 
To:天地弦,
能详细说说你的思路吗?是不是还是要人为的来创建TObjectList,并人为的给它赋值啊?这样就没有意义了,还是要在设计的时候新建一个窗体就往数据表里手工添加一个啊!
 
那就建个数据表。某窗体的Id Name hasChild parentid
调用时写入数据库。
然后从数据库中取出显示在dxDBTreeView1中
 
用RTTI看行不行。至于怎么用,还请高手出招。
 
Easy,读资源文件。
 
delphi怎么干你也怎么干。
 
把黄大仙速成手册输入到delphi中......
 
呵呵楼主是头猪啊当FORM还没有被创建的时候你就要求去统计他你能统计得了吗你知道那个创建的动作会被执行多少次吗?
 
要解决这个问题,只有一个办法:
在每一个窗体的单元,增加一个方法: procedure Register
这样实现:
procedure Register
begin
SL.Add(TFormXXX.ClassName);
end;

SL需要自己定义,是一个容器类,可以用TStrings,也可以用DeCAL容器,而且必须使全局的。
最后要注意: 把这个方法在窗体单元的initlization部分调用,确保一开始就注册

总之,必须在内存中保存,你才能在不创建的情况下找到,否则成了无源之水了:)

思想就是这样,我没有亲自测试:)
 
后退
顶部