procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
(1) Child:=TForm(FormClass.NewInstance);
(2) TForm(fm):=Child;
Child.Create(AOwner);
end;请问,(1),(2) 两句作何解?
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
(1) Child:=TForm(FormClass.NewInstance);
(2) TForm(fm):=Child;
Child.Create(AOwner);
end;请问,(1),(2) 两句作何解?
FormClass.NewInstance 是创建FormClass这个类的对象,和构造器有点一样,在delphi的
以前版本里比较常用!
enumwindowchile()等API函数比较好,我做过一个你要不要啊?!
(2)就是个类型转换,不过不是很安全,最好用AS操作符
传进来的参数都有毛病
FormClass: TFormClass
这里formclass不能和classtype相比
classtype是与rtti中存放的类信息相比较而已
而这个传进来的东西是未实始化的类实例罢了
fm未说明数据类型
1. 查找桌面上是否存在指定classname的窗体,如果存在则将他显示出来,并且放在无类型变量fm中返回,同时退出函数;
2. 如果没有找到指定classname的窗体,就重新初始化一个,并且放在fm中返回.(1) Child:=TForm(FormClass.NewInstance); /* 分配formclass指定类的内存 */
(2) TForm(fm):=Child; /* 返回内存指针 */
(3) Child.Create(AOwner); /* 格式化内存数据为formclass指定的结构 */ 上面的(1)(3)两句话创建了一个Formclass指定类型的窗体. (2)返回实例指针;
上面的语句可以改为:
Child := TForm(FormClass.create(Aowner)) ;
TForm(fm):=Child;