我想控制子窗体只显示一次,但是没有成功,请高手指点啊!
procedure Tsjhcgl.sjhcrkClick(Sender: TObject);
begin
OpenMDIWin(Fm_sjhcrk); //这是一个子窗体单击时的代码
end;OpenMDIWin是我在主窗体中自定义的过程,代码是这样的
Procedure Tsjhcgl.OpenMDIWin(Frm:TForm);
var
i:integer;
F:TForm;
begin
for i:=0 to sjhcgl.MDIChildCount-1 do begin
F:=sjhcgl.MDIChildren[i];
if F.WindowState=wsMinimized then
showwindow(F.Handle,sw_shownormal)
else if F=nil then begin
F:=F.Create(self);
F.Show;
end
else
showwindow(F.Handle,sw_show);
F.BringToFront;
F.SetFocus;
end;
end;
我的目的是想判断有没有子窗体,有则激活;最小化的则最大化;没有则创建,但是没的反应啊!请高手指点啊,估计是过程写错了,但是也没报错。
procedure Tsjhcgl.sjhcrkClick(Sender: TObject);
begin
OpenMDIWin(Fm_sjhcrk); //这是一个子窗体单击时的代码
end;OpenMDIWin是我在主窗体中自定义的过程,代码是这样的
Procedure Tsjhcgl.OpenMDIWin(Frm:TForm);
var
i:integer;
F:TForm;
begin
for i:=0 to sjhcgl.MDIChildCount-1 do begin
F:=sjhcgl.MDIChildren[i];
if F.WindowState=wsMinimized then
showwindow(F.Handle,sw_shownormal)
else if F=nil then begin
F:=F.Create(self);
F.Show;
end
else
showwindow(F.Handle,sw_show);
F.BringToFront;
F.SetFocus;
end;
end;
我的目的是想判断有没有子窗体,有则激活;最小化的则最大化;没有则创建,但是没的反应啊!请高手指点啊,估计是过程写错了,但是也没报错。
//子窗体关闭代码
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
form2 := nil;
end;
//主窗体调用代码
procedure TForm1.aa1Click(Sender: TObject);
begin
if form2 = nil then
form2 := TForm2.Create(self);
form2.Show;
form2.WindowState := wsMaximized;
end;
//若窗体不存在,则新建窗体并显示,若窗体已存在,则只显示窗体
class procedure TGlobal.ShowForm(vFormClass: TFormClass; var vForm);
var
aForm:TForm absolute vForm;
begin
if aForm=nil then
aForm:=vFormClass.Create(Application);
if aForm.WindowState=wsMinimized then
aForm.WindowState:=wsNormal;
aForm.Show;
aForm.BringToFront;
end;然后在主窗体MainForm中调用显示Form1:
TGlobal.ShowForm(TForm1,Form1);