在MDI中遇到一个怪病,请大家帮助诊断 ( 积分: 0 )

  • 主题发起人 主题发起人 药到命除
  • 开始时间 开始时间

药到命除

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一个程序时用到了MDI,在主窗体中有这样的代码:
procedure TfrmMain.ItemGyClick(Sender: TObject);
begin

if not assigned(frmGyManage) then
begin
frmGyManage := TfrmGyManage.Create(application);
ShowWindow(frmGyManage.handle,SW_MAXIMIZE);
end
else
frmGyManage.BringToFront;
end;

procedure TfrmMain.ItemMzClick(Sender: TObject);
begin
if not assigned(frmMzManage) then
begin
frmMzManage := TfrmMzManage.Create(Application);
ShowWindow(frmMzManage.Handle,SW_MAXIMIZE);
end
else
frmMzManage.BringToFront;
end;
可是不管先打开哪个子窗口,在打开第二个子窗体时就会出错。
下面是CPU监视图
ldmsapp
 
我在写一个程序时用到了MDI,在主窗体中有这样的代码:
procedure TfrmMain.ItemGyClick(Sender: TObject);
begin

if not assigned(frmGyManage) then
begin
frmGyManage := TfrmGyManage.Create(application);
ShowWindow(frmGyManage.handle,SW_MAXIMIZE);
end
else
frmGyManage.BringToFront;
end;

procedure TfrmMain.ItemMzClick(Sender: TObject);
begin
if not assigned(frmMzManage) then
begin
frmMzManage := TfrmMzManage.Create(Application);
ShowWindow(frmMzManage.Handle,SW_MAXIMIZE);
end
else
frmMzManage.BringToFront;
end;
可是不管先打开哪个子窗口,在打开第二个子窗体时就会出错。
下面是CPU监视图
ldmsapp
 
有人帮忙解决了我另加分,这个本来是想试试图能不能显示出来的。
 
问题就出在 formX := TformX.create(application);上,只要到这就出错,我试着用这种方法新建一个程序,没什么问题,可是在这个程序里就是行不通。为什么?
 
if not assigned(frmMzManage) then
frmMzManage := TfrmMzManage.Create(self);
frmMzManage.show;
试试
 
function Tfrmmain.Isopenchild(strname: string): boolean;
var
i: integer;
begin
result := False;
for i := 0 to MDIChildCount - 1 do
if UpperCase(MDIChildren.Name) = UpperCase(strName) then
begin
result := True;
break;
end;
end;

if not isopenchild('frmop_user') then
begin
application.CreateForm(tfrmop_user,frmop_user);
frmop_user.show;
end;
if (frmop_user.WindowState=wsminimized)or(frmop_user.WindowState=wsnormal) then
frmop_user.WindowState:=wsMaximized;

兄弟这个应该可以解决,试试,可不要忘记给我加分啊![:D]
 
应该有处理其他的窗体的代码,比如把其它的窗体都关闭,或者把当前的那个窗口设为非活动的窗口。
 
Clearboy兄的代码也很漂亮。
assigned在Delphi中使用比较容易出现指针悬挂,具体可见帮助内容。
 
if fmChild = nil then
fmChild := TfmChild.Create(nil);
fmChild.Show;

在FormOnClose加上
FreeAndNil(fmChild);

需要最大化在FormOnCreate加上
WindowState := wsMaximized 就行了
 
后退
顶部