问题如下:
在菜单中打开了某个MDI子窗口后,如果再次打开这个MDI子窗口,这样就会打开一个和刚才一样的MDI子窗口,可我想不打开新的MDI子窗口,而是把刚才打开的子窗口变成当前的激活状态;也就是说对于同一个MDI子窗口,程序运行时永远只能打开一个,再次打开就会把已经打开的窗口激活。该怎么做?有人提到用这个方法:
if assigned(Mdiform)<>nil then于是我就写成了下面的代码:
下面是运行主窗口的添加菜单的过程
procedure Tform_main.addClick(Sender: TObject);
begin
if assigned(Mdiform)<>nil then
begin
Form_add:=TForm_add.Create(Application); //创建指定MDI子窗口
Form_add.Show;
end;
end;可编译通不过!下面是提示:(未定义变量)
[Error] main.pas(143): Undeclared identifier: 'Mdiform'
[Error] main.pas(143): Incompatible types
[Fatal Error] message.dpr(13): Could not compile used unit 'main.pas'本人刚学DELPHI。极菜!请各位大鸟指教。请详细些!!!
在菜单中打开了某个MDI子窗口后,如果再次打开这个MDI子窗口,这样就会打开一个和刚才一样的MDI子窗口,可我想不打开新的MDI子窗口,而是把刚才打开的子窗口变成当前的激活状态;也就是说对于同一个MDI子窗口,程序运行时永远只能打开一个,再次打开就会把已经打开的窗口激活。该怎么做?有人提到用这个方法:
if assigned(Mdiform)<>nil then于是我就写成了下面的代码:
下面是运行主窗口的添加菜单的过程
procedure Tform_main.addClick(Sender: TObject);
begin
if assigned(Mdiform)<>nil then
begin
Form_add:=TForm_add.Create(Application); //创建指定MDI子窗口
Form_add.Show;
end;
end;可编译通不过!下面是提示:(未定义变量)
[Error] main.pas(143): Undeclared identifier: 'Mdiform'
[Error] main.pas(143): Incompatible types
[Fatal Error] message.dpr(13): Could not compile used unit 'main.pas'本人刚学DELPHI。极菜!请各位大鸟指教。请详细些!!!
解决方案 »
- 强烈要求月亮让 tjianliang 兼任非技术区版主,活跃D版气氛
- Delphi中怎么修改程序中数库字段的内容?
- adoqry下,插入两列新字段的语句时的问题!
- 我想做一个拖动程序(拖动label),不知怎么做?格哦说说!有本事来拿吧
- 得到三个三角,散600,这是第六个100分,12:30结贴,我也要吃饭去了,呵呵!
- 如何在WIN2K下关闭或重新启动计算机???
- 一个低级的问题 !请。。。
- 我在作登录是出现了"runtime error"错误,详情见内
- 怎样将sql_server中某一数据库中的表以文本方式保存?
- 大家帮我!怎样编写数据库驱动程序(那种都行),能读取原有驱动程序信息的也行!
- 如何打印memo里的文本? 高分相送!!!!!
- 问一个关于Action的问题:
Createshowform(Tpform: TFormClass; pchild: TForm;pstate: integer)
if not Gb_FormCreate[pstate] then
begin
pchild:=Tpform.Create(nil);
Gb_form[pstate]:=pchild;
Gb_form[pstate].WindowState:=wsmaximized;
Gb_FormCreate[pstate]:=true;
end关闭窗体时:
Gb_form[pstate]:=false;
if FrmMain.MDIChildCount =0 then
begin
Frm子窗体:=TFrm子窗体.Create(self);
Frm子窗体.Show;
end;
end;
if assigned(frmChild)<>nil then
begin
FrmChild:=TFrmChild.Create(self); //创建指定MDI子窗口
FrmChild.Show;
end;
begin
FrmChild:=TFrmChild.Create(self); //创建指定MDI子窗口
FrmChild.Show;
end
else
FrmChild.BringToFornt; //把它激活,Show在最前面。
请看procedure Tform_main.addClick(Sender: TObject);
begin
//这里是assigned(Form_add),当然这个Form_add必须是你已经定义好的
if assigned(Form_add)<>nil then
begin
Form_add:=TForm_add.Create(Application); //创建指定MDI子窗口
Form_add.Show;
end
else
Form_add.BringToFront; //把它Show在最前面
end;
function TFrmMain.ShowMDIChildWindowEx(ClsFrm: TFormClass;
bRestore: boolean): boolean;
var
i: integer;
frm: TForm;
begin
result:= false;
frm:= nil;
for i:=0 to self.MDIChildCount-1 do
if (Self.MDIChildren[i].ClassNameIs(ClsFrm.ClassName)) then begin
frm:= Self.MDIChildren[i];
break;
end;
try
if (frm = nil) then begin
frm:= ClsFrm.Create(self);
if self.MDIChildCount <= 1 then
frm.WindowState:= wsMaximized;
end; // end of if
with frm do begin
if (bRestore) then begin
if (WindowState = wsMinimized) then
WindowState:= wsNormal;
end;
Show;
end;
Result:= true;
except
on E: Exception do
MessageBox(0, pchar('错误。'#10#13'' + E.Message),'', MB_ICONERROR);
end;
end;
使用方法:procedure TFrmMain.actSLogManagerExecute(Sender: TObject);
begin
ShowMDIChildWindowEx(TFrmLogManager, true);
end;
form.show;