避免mdi子窗口的重复打开(50分)

  • 主题发起人 主题发起人 龙飞
  • 开始时间 开始时间

龙飞

Unregistered / Unconfirmed
GUEST, unregistred user!
在主窗口中打开多个MDI子窗口,能否避免重复打开,即:系统如果发
现要打开的文件已经在某一子窗口中,能否自动激活此子窗口。
 
<a http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=244037>请看</a>
 
<a href=http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=244037>请看</a>
 
我是如下面的主程序来产生MDI窗口的,不知你的函数如何用
private
{ Private declarations }
procedure CreatemditextChild(const Name: string);
procedure CreatemdidataChild(const Name: string);
public
{ Public declarations }

procedure TMainForm.CreatemditextChild(const Name: string);
var
Child: TmditextChild;
begin
//create a new MDI textchild window
Child := TmditextChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;

procedure TMainForm.CreatemdidataChild(const Name: string);
var
Child: TmdidataChild;
begin
// create a new MDI datachild window
Child := TmdidataChild.Create(application);
Child.Caption := Name;
child.table1.active:=false;
child.table1.tablename:=name;
child.table1.active:=true;
// if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;

//下面是打开通用对话框
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
OpenDialog.initialdir:=opendialog.filename
if OpenDialog.Execute then
if not checkform(opendialog.filename) then//在此处判断要打开的文件是否已经打开
case opendialog.filterindex of
1: CreatemditextChild(OpenDialog.FileName);
2: createmdidatachild(OpenDialog.FileName);
end;
end;
 
看我的,绝对可以搞定,到时候别忘了给我加分:
把下面这段代码放到打开子窗口的事件里.
procedure TMainWin.Open_childformClick(Sender: TObject);
var
li_loop:integer;
lbl_falg:boolean; //窗口是否打开的标志
begin
lbl_falg:=false;
//判断要打开的子窗体中是否已经打开
for li_loop:=0 to self.MDIChildCount-1 do
begin
if self.MDIChildren[li_loop] is Tchildform_name then
begin
lbl_falg:=true; //判断出窗口已打开
end
end;

if lbl_falg then //如果子窗体已打开,则将它激活
begin
childform_name.Show;
end
else // 如果子窗体未打开,则创建它
begin
childform_name:=Tchildform_name.Create(Self);
childform_name.Show;
end;
end;
 
我给过别人例子,也给你一个吧.
 
我有個打開mdi 窗口的function 你試一試.

//*************打開mdi子窗口******************//
//** 判別需要打開的窗口是否已經打開,只可打開一次.
//** 若已打開但為最小化,變為最大化,調為最前面.
//********************************************//
procedure TMainForm.Openmdiwin(Sender: TFormClass);
Var
iii:Integer;
Frm:TForm;
begin
For iii:=0 to MainForm.MDIChildCount-1 Do Begin
if MainForm.MDIChildren[iii].ClassType=Sender Then Begin
Frm:=MainForm.MDIChildren[iii];
if Frm.WindowState=wsMinimized then //為最小化
ShowWindow(Frm.handle,SW_SHOWNORMAL)
Else
ShowWindow(Frm.handle,SW_SHOWNA);
if (Not Frm.Visible) then Frm.Visible:=True;
Frm.BringToFront;
Frm.SetFocus;
Exit;
End;
End;
Frm:=TForm(Sender.NewInstance);
Frm:=Frm.Create(Self);
Frm.Show;
end;
 
子窗口打开一个文件以后就将窗口的Caption赋值为文件的名字,在打开新窗口的时候
用一个循环检测子窗口队列,如果某个子窗口的标题=文件名,则激活该子窗口
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部