多文档界面操作 如何在多文档界面里显示模态窗口, 就是不关闭当前窗口,不能对主窗口进行操作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你试一下。不行,出现一个错误提示。cannot make a visible window modal. 首先保证窗体不是自动生成的,在Project->Option->forms里把自窗体从Auto区移出然后动态生成此窗体,showmodal出例:Application.CreateForm(TFrmLogOn, FrmLogOn); with FrmLogOn do begin ShowModal; end; FreeAndNil(FrmLogOn); 楼上。你说的这些在单文档界面里可以.但是在多文档界面里是不行的它的用途很广泛。像WPS2000 里面,文件编辑好以后对文档进行加密,打开加密窗口以后,就禁止对主窗口进行操作.动态生成窗体也不行,象下面这样 Application.CreateForm(TloginForm, loginForm); loginform.Showmodal; 我是一只菜鸟,只能说说自己的想法,实现就不行了。希望大家看了我的想法不要笑我。方法一:将鼠标限制在当前窗体中。方法二:在主Form中所有控件的OnMouseMove事件中,判断是否有MDI Form,并且Form的Windowstate属性不是wsMinimized,如果有的话,将鼠标弹进MDI Form中。方法三:在MDI窗体Show的时候,干脆将主Form中的东东统统Disable掉,关闭或最小化MDI Form时再Enable. 楼上的,你说的第一种方法到是容易实现,mapwindowpoint 以及 clipcursor 就可以搞定但是 何时来解除呢 ? 像WPS2000 里面,文件编辑好以后对文档进行加密,打开加密窗口以后,就禁止对主窗口进行操作.并且鼠标可以在桌面任何位置移动 可以在父窗体的某一事件中用窗体的动态生成来完成:example:Form1 := TForm1.Create(Application); try Form1.ShowModal; //将窗体以实模显示,也就是说不关闭Form1不能对父窗体操作 finally Form1.Free; Form1 := nil; end;不过要先将Form1在应用程序创建中拿掉,不然就会出现两个Form1 to: xiaoyuer0851(小鱼儿0851) 可以在MDI Form最小化或关闭的时候还原。(不过如果使用Win+M,Win+Tab等热键,就不晓得如何处理了)如下:在 private 中定义:procedure WMSysCommand(var Msg: TWMSysCommand);message WM_SYSCOMMAND;在程序部份加入:procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);var btScreen: TRect;begin if (Msg.CmdType = SC_MINIMIZE) or// (Msg.CmdType = SC_MAXIMIZE) or (Msg.CmdType = SC_Close) then begin btScreen := Rect(0, 0, Screen.Width, Screen.Height); ClipCursor(@btScreen); inherited; end;end; to guosq(郭子) :第三种方法不能达到你的要求吗? fireking88(秋水) :据我所知,多窗体是不可以ShowModal的,Visible属性也不可以设为False。如果可以,请告诉我方法。 终于做出来了,一定要给分哦!!有问题可以QQ找我:(program Project1;uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3};{$R *.res}begin Application.Initialize; Application.CreateForm(TForm1, Form1);//先创建mdi主窗体 try form2:=Tform2.Create(application);//form2为一个非子窗体 form2.ShowModal ; finally if form2.Button1.ModalResult =1 then Halt else begin Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm2, Form2); application.Run; end; end;end.procedure TForm2.Button1Click(Sender: TObject);begin //在此之前天加数据验证 self.ModalResult :=mrOk;end;procedure TForm2.Button2Click(Sender: TObject);begin self.Button1.ModalResult:=mrcancel; application.terminate;end;end. 如何判断子类是不是某类的子类? delphi 怎么向WEBBROWSER浏览的页面发送TAB键 怎么算天数? 一个很菜的问题?谁能解释一下。在线等待!! 下料生产通知单报表问题]---急用 请问如何制作数据库的安装程序(在线等待) 昨晚家中被盗,极不爽,散分! delphi FormCloseQuery 我用D5作了一个本地数据库管理系统,功能非常强大!谁想要可留下Email,发给你一份。 存储过程,给个例子 软件经整改后再发布,这次未准备散分,旨在结交朋友。有意者请进,也请意见于我,另留有一疑问还请高手指点一二! 我老爸的腿摔坏了,郁闷!
不行,出现一个错误提示。cannot make a visible window modal.
然后动态生成此窗体,showmodal出
例:
Application.CreateForm(TFrmLogOn, FrmLogOn);
with FrmLogOn do
begin
ShowModal;
end;
FreeAndNil(FrmLogOn);
你说的这些在单文档界面里可以.但是在多文档界面里是不行的
它的用途很广泛。
像WPS2000 里面,文件编辑好以后对文档进行加密,打开加密窗口以后,就禁止对主窗口进行操作.动态生成窗体也不行,象下面这样
Application.CreateForm(TloginForm, loginForm);
loginform.Showmodal;
方法一:将鼠标限制在当前窗体中。
方法二:在主Form中所有控件的OnMouseMove事件中,判断是否有MDI Form,并且Form的Windowstate属性不是wsMinimized,如果有的话,将鼠标弹进MDI Form中。
方法三:在MDI窗体Show的时候,干脆将主Form中的东东统统Disable掉,关闭或最小化MDI Form时再Enable.
但是 何时来解除呢 ?
example:Form1 := TForm1.Create(Application);
try
Form1.ShowModal; //将窗体以实模显示,也就是说不关闭Form1不能对父窗体操作
finally
Form1.Free;
Form1 := nil;
end;不过要先将Form1在应用程序创建中拿掉,不然就会出现两个Form1
在 private 中定义:
procedure WMSysCommand(var Msg: TWMSysCommand);
message WM_SYSCOMMAND;在程序部份加入:
procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
var
btScreen: TRect;
begin
if (Msg.CmdType = SC_MINIMIZE) or
// (Msg.CmdType = SC_MAXIMIZE) or
(Msg.CmdType = SC_Close) then
begin
btScreen := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@btScreen);
inherited;
end;
end;
第三种方法不能达到你的要求吗?
program Project1;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);//先创建mdi主窗体
try
form2:=Tform2.Create(application);//form2为一个非子窗体
form2.ShowModal ;
finally
if form2.Button1.ModalResult =1 then
Halt
else
begin
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm2, Form2);
application.Run;
end;
end;
end.procedure TForm2.Button1Click(Sender: TObject);
begin
//在此之前天加数据验证
self.ModalResult :=mrOk;end;procedure TForm2.Button2Click(Sender: TObject);
begin self.Button1.ModalResult:=mrcancel;
application.terminate;
end;end.