如何判断一个form的存在 (100分)

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

canna

Unregistered / Unconfirmed
GUEST, unregistred user!
如下语句create一个form:
setexportbill:=Tsetexportbill.create(application);
之后,如何判断该form仍然存在(即未被free),可继续调用,否则,需再次create。
谢谢!
 
if setexportbill<>nil 就存在.....给分...
 
if not ActiveFrm(setexportbill) then
begin
setexportbill:=Tsetexportbill.create(application);
SetexportBill.Show;
end;

忘了ActiveFrm是自己写的函数,补在下面:

function ActiveFrm(vFrm: TForm):Boolean;
var
vI_From:Integer;
begin
Result:=false;
if vFrm=nil then exit;
For vI_From:=0 to Frm_Main.MdiChildCount Do //Frm_Main是主调函数。
begin
if Frm_Main.MdiChildRen[vI_From]=vFrm then
begin
SetWindowPos(vFrm.Handle,HWND_TOP,vFrm.Left,vFrm.Top,vFrm.Width,vFrm.Height,SWP_SHOWWINDOW);
Result:=true;
break;
end;
end;
end;
 
看看下面的代码,通用的
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 assigned(Form1) then 存在
然后,释放的时候,Form1.Free;
Form1:=Nil;//这一句是必要的,否则会出问题,Free不会把指针置空
 
先谢谢各位,待我去试试!
 
多人接受答案了。
 
后退
顶部