delphi 控制子窗体只显示一次

xianghuiwan 2008-07-08 05:53:39
我想控制子窗体只显示一次,但是没有成功,请高手指点啊!
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;
我的目的是想判断有没有子窗体,有则激活;最小化的则最大化;没有则创建,但是没的反应啊!请高手指点啊,估计是过程写错了,但是也没报错。
...全文
161 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
llj0209013 2008-07-09
  • 打赏
  • 举报
回复
新建一unit,如命名为:TGlobal
//若窗体不存在,则新建窗体并显示,若窗体已存在,则只显示窗体
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);
simonhehe 2008-07-09
  • 打赏
  • 举报
回复

//子窗体关闭代码
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;


5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧