怎么样判断一form窗体已在内存存在了?(200分)

  • 主题发起人 主题发起人 x123
  • 开始时间 开始时间
X

x123

Unregistered / Unconfirmed
GUEST, unregistred user!
简单描述就是:有两个窗体,一主窗体(FORM1),它的FORMSTYLE属性设置为:fsMDIForm;
另一子窗体(FORM2),它的FORMSTYLE属性设置为:fsMDIChild;
问题是:当程序运行后,打开FORM2后,还可以打开FORM2这个窗体,这个问题本人解决不
了,请各位大侠给出一个好的解决方法(给出解决这个问题的一段例子程序),或者给出怎样判
断form2窗体已在内存存在了?的解决方法,谢谢各位大侠了,给出200分,如不够,可以再给。
急。。。。。。。
 
findwindow()
函数可以找到
 
procedure OpenForm(FormClass: TFormClass; var AForm;
AOwner:TComponent=nil);
//根据窗口类名建立窗口,如果窗口存在则只激活它
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms.ClassType=FormClass then
begin
Child:=Screen.Forms;
if Child.WindowState=wsMinimized then
Child.WindowState:=wsNormal;
Child.BringToFront;
Child.Setfocus;
TForm(AForm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(AForm):=Child;
if not assigned(aowner) then aowner:=application;
Child.Create(AOwner);
end;

function ActiveForm(FormTitle:string):boolean;
//根据窗口标题激活窗口,如果窗口不存在则返回假
var
i:integer;
Child:TForm;
begin
Result:=False;
for i:=0 to screen.FormCount-1 do
begin
Child:=Screen.Forms;
if Child.caption=formtitle then
begin
Child:=Screen.Forms;
if Child.WindowState=wsminimized then
Child.WindowState:=wsnormal;
Child.BringToFront;
Child.SetFocus;
Result:=true;
end;
end;
end;
 
if FindWindow(... ) then ..//通过标题查找
if Assigned(Form2) then ... //通过对象句柄判断

for i = 0 to form1.mdicount - 1
if form1.child is TForm2 then... //通过对象类型查找
 
大意如下,可能有些方法不对,自己参考帮助即可:

vai i:integer;
for i:=0 to form1.mdichildcount-1 do
begin
if form1.Mdichildren.name = 'form2' then
begin
form2.bringtofront
break;
end;
end;
 
补一下
if form2=nil then
form2:=tform2.create(application);
form2.show;
 
if findwindow(nil,'Form1')=0 then message(存在)
 
正好,我也用上了,谢谢了
 
if not Assigned(frm) then
frm := Tfrm.Create(Application);
frm.Show;

关闭的时候要注意
Close事件中
Action := CaFree;
frm := nil;
这样,只要你的表单是打开的了,就会直接打开,如果没有打开,就会创建。打开后关掉了
再重开也没有问题。
你要的是不是这个意思?
 
if findwindow(nil,'Form2')<>0 then showmessage('存在')
 
子窗体(FORM2) create 時把菜單或快速鍵disable,
子窗体(FORM2) close 時把菜單或快速鍵enabled!

 
谢谢各位大侠,
 
给分了
可以继续讨论
 
后退
顶部