如何激活mdichildform。

mybluefish 2003-04-01 11:50:57
一个mdi子窗体,已经设置好主从关系后,但见mdi主窗体中的按钮来显示,提示当前没有激活的mdi子窗体。搜索了一下没有明确的回答。到底应该怎么做呢。看delphi自己创建的mdi程序,多了下面一段过程
procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;
到底应该怎么做呢?
...全文
255 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ugk 2003-04-04
  • 打赏
  • 举报
回复
关键是application.Createform(tform2,form2);
就是把应用程序指向form2,要不是就还是form1,明白了吗?
ugk 2003-04-04
  • 打赏
  • 举报
回复
options-----autocreate forms 为空
共三form
form1 fsnormal
form2 fsmdiform
form3 fsmdichild

project下
begin
Application.Initialize;
form1:=Tform1.Create(Application);
form1.showmodal;
Application.Run;
end.

form1下
procedure TForm1.Button1Click(Sender: TObject);
begin
application.Createform(tform2,form2);
form2.show;
close;
end;

form2下
procedure TForm2.Button1Click(Sender: TObject);
begin
form3:=tform3.create(self);
form3.show;
end;

测试为没有问题
你可试试
mybluefish 2003-04-03
  • 打赏
  • 举报
回复
我试验出来,当mdi主窗体为工程的主窗体时,程序没有错误,可以直接通过单击按钮显示mdi子窗体,不用特别设置。问题是我的mdi主窗体不是工程的主窗体,该怎么做呢?
好急啊,大家帮帮忙!
ugk 2003-04-02
  • 打赏
  • 举报
回复
楼上的,好象把问题复杂了吧,不过写得挺详细的,辛苦了。
上面的说的是没法激活,我试过,不知道你说的是什么问题。不知道可否说清楚一点。
你的意思是不是要显示mdichild,但是没有显示啊?要是没有生成,当然是‘当前没有激活的mdi子窗体’,delphi它只是生成主窗体,不会生成mdichild的。上面的自动生成的命令是在new中用的,就是菜单中的new命令,不是他生成的时候用的,生成主窗体的时候是不运行的。哈哈哈,看来goldencity(响马) 是表错情了,不过我想你要是愿意帮忙的话,可否说说怎样不让mdichild自动缩进,就是所有的不同的mdichild都在同一位置。我用inherited方法来生成不同功能的窗体。
goldencity 2003-04-02
  • 打赏
  • 举报
回复
procedure OpenForm(FormClass: TFormClass; var fm; AOwner: TComponent);
var
i: integer;
Child: TForm;
begin
for i := 0 to Screen.FormCount - 1 do
if screen.Forms[i].Owner = Aowner then
exit
else
//如有一窗口打开,将不打开新的窗口
if Screen.Forms[i].ClassType = FormClass then
begin
Child := Screen.Forms[i];
if Child.WindowState = wsMinimized then
//如已存在但最少化的窗口,将还原显示
ShowWindow(Child.handle, SW_SHOWNORMAL)
else
ShowWindow(Child.handle, SW_SHOWNA);
if (not Child.Visible) then
Child.Visible := True;
Child.BringToFront;
Child.Setfocus;
TForm(fm) := Child;
exit;
end;
Child := TForm(FormClass.NewInstance);
TForm(fm) := Child;
Child.Create(AOwner);
child.WindowState:=wsMinimized;
// showwindow(child.Handle,sw_shownormal);
sleep(100);
child.WindowState:=wsnormal;
end;
自己看看:)
linzhisong 2003-04-02
  • 打赏
  • 举报
回复
在工程的option里面设置mainform先启动
Magusflp008 2003-04-02
  • 打赏
  • 举报
回复
从变量角度看,上面的程序终 Child 是局部变量,当过程结束时,变量也就释放
mybluefish 2003-04-02
  • 打赏
  • 举报
回复
谢谢楼上各位。其实我只是一登陆窗体验证后显示mdi主窗体,通过new菜单显示mdi子窗体,但单击new按钮是提示当前窗体不能激活。就是一个创建并显示mdichild的过程:定义主从关系后单击按钮显示子窗体出错。麻烦各位试一下。
参考了delphi自己创建的mdi程序,就多了上面一个过程。到底应该如何的啊!!!

5,402

社区成员

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

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