多文档界面操作

guosq 2003-04-26 10:42:23
如何在多文档界面里显示模态窗口, 就是不关闭当前窗口,不能对主窗口进行操作。
...全文
96 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
guosq 2003-04-27
  • 打赏
  • 举报
回复
我在线上等待....
guosq 2003-04-27
  • 打赏
  • 举报
回复
qq:15276311
Spectrum 2003-04-27
  • 打赏
  • 举报
回复
gz
hlddg 2003-04-27
  • 打赏
  • 举报
回复
你有qq吗?
guosq 2003-04-27
  • 打赏
  • 举报
回复
楼上。
我还是不能在多文档应用程序里创建一个模态对话框.
guosq 2003-04-27
  • 打赏
  • 举报
回复
散分。
我已经在各位的大力支持下,把它给解决了。我再一次谢谢大家。

hlddg 2003-04-27
  • 打赏
  • 举报
回复
终于做出来了,一定要给分哦!!有问题可以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.



hlddg 2003-04-26
  • 打赏
  • 举报
回复
你的用途是什么啊 ,不用子窗体不就可以模式显示了吗
u2m 2003-04-26
  • 打赏
  • 举报
回复
首先保证窗体不是自动生成的,在Project->Option->forms里把自窗体从Auto区移出
然后动态生成此窗体,showmodal出
例:
Application.CreateForm(TFrmLogOn, FrmLogOn);
with FrmLogOn do
begin
ShowModal;
end;
FreeAndNil(FrmLogOn);
guosq 2003-04-26
  • 打赏
  • 举报
回复
你试一下。
不行,出现一个错误提示。

cannot make a visible window modal.
breezing 2003-04-26
  • 打赏
  • 举报
回复
showmodal
hlddg 2003-04-26
  • 打赏
  • 举报
回复
给不给分啊,我帮你解决,没问题
QQ:125732756
huahanbing9 2003-04-26
  • 打赏
  • 举报
回复
fireking88(秋水) :

据我所知,多窗体是不可以ShowModal的,Visible属性也不可以设为False。如果可以,请告诉我方法。
huahanbing9 2003-04-26
  • 打赏
  • 举报
回复
to guosq(郭子) :
第三种方法不能达到你的要求吗?
huahanbing9 2003-04-26
  • 打赏
  • 举报
回复
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;
fireking88 2003-04-26
  • 打赏
  • 举报
回复
可以在父窗体的某一事件中用窗体的动态生成来完成:
example:

Form1 := TForm1.Create(Application);
try
Form1.ShowModal; //将窗体以实模显示,也就是说不关闭Form1不能对父窗体操作
finally
Form1.Free;
Form1 := nil;
end;

不过要先将Form1在应用程序创建中拿掉,不然就会出现两个Form1
guosq 2003-04-26
  • 打赏
  • 举报
回复
像WPS2000 里面,文件编辑好以后对文档进行加密,打开加密窗口以后,就禁止对主窗口进行操作.

并且鼠标可以在桌面任何位置移动
xiaoyuer0851 2003-04-26
  • 打赏
  • 举报
回复
楼上的,你说的第一种方法到是容易实现,mapwindowpoint 以及 clipcursor 就可以搞定
但是 何时来解除呢 ?
huahanbing9 2003-04-26
  • 打赏
  • 举报
回复
我是一只菜鸟,只能说说自己的想法,实现就不行了。希望大家看了我的想法不要笑我。
方法一:将鼠标限制在当前窗体中。
方法二:在主Form中所有控件的OnMouseMove事件中,判断是否有MDI Form,并且Form的Windowstate属性不是wsMinimized,如果有的话,将鼠标弹进MDI Form中。
方法三:在MDI窗体Show的时候,干脆将主Form中的东东统统Disable掉,关闭或最小化MDI Form时再Enable.
guosq 2003-04-26
  • 打赏
  • 举报
回复
楼上。
你说的这些在单文档界面里可以.但是在多文档界面里是不行的
它的用途很广泛。
像WPS2000 里面,文件编辑好以后对文档进行加密,打开加密窗口以后,就禁止对主窗口进行操作.

动态生成窗体也不行,象下面这样
Application.CreateForm(TloginForm, loginForm);
loginform.Showmodal;

5,388

社区成员

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

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