//------------------------------------------------------------------------
我想让我做的应用的各个子窗口都单独打开,而不是MDI或SDI(简单地说就象IE这样),因此我在窗口利用了这个函数procedure Tfrm_form1.CreateParams(VAR Params: TCreateParams);// 单独打开窗口beginInherited CreateParams(Params);Params.WndParent := GetDesktopWindow;end;这样打开的窗口,在任务栏中是单独的窗口了。但是如果我在这个窗口中再打开对话框(也是自己做的form)的话,对话框总是出现在应用的主窗口,怎么才能让对话框弹出在Tfrm_form1的前面呢。也就是说:我的主程序窗口是frm_main, 从frm_main会打开一个窗口frm_form1,frm_form1是单独打开的,从任务栏上看是单独的图标。 现在,我在frm_form1中showmodal打开一个窗口form2,这个form2会出现在应用主窗口frm_main的前面。而我要的是form2出现在frm_form1前面。答:Kingron也曾经为了这个问题头疼了好久,后来终于解决掉了:关键在于Form2,你必须同时重载Form2的CreateParams,同样,修改Params.WndParent为Frm_Form1.Handle即可。这个问题到此就可以解决,如果你的Form2还需要在其他地方使用,那么就必须采取动态创建的方法,而且必须修改它的CreateParams,把它的Param.WndParent设置为GetActiveWindow即可。
//-----------------------------------------------------------------------
form的问题是可以解决了,但是messagledlg的却是怎么实现这种效果的??请问高手!!!
我想让我做的应用的各个子窗口都单独打开,而不是MDI或SDI(简单地说就象IE这样),因此我在窗口利用了这个函数procedure Tfrm_form1.CreateParams(VAR Params: TCreateParams);// 单独打开窗口beginInherited CreateParams(Params);Params.WndParent := GetDesktopWindow;end;这样打开的窗口,在任务栏中是单独的窗口了。但是如果我在这个窗口中再打开对话框(也是自己做的form)的话,对话框总是出现在应用的主窗口,怎么才能让对话框弹出在Tfrm_form1的前面呢。也就是说:我的主程序窗口是frm_main, 从frm_main会打开一个窗口frm_form1,frm_form1是单独打开的,从任务栏上看是单独的图标。 现在,我在frm_form1中showmodal打开一个窗口form2,这个form2会出现在应用主窗口frm_main的前面。而我要的是form2出现在frm_form1前面。答:Kingron也曾经为了这个问题头疼了好久,后来终于解决掉了:关键在于Form2,你必须同时重载Form2的CreateParams,同样,修改Params.WndParent为Frm_Form1.Handle即可。这个问题到此就可以解决,如果你的Form2还需要在其他地方使用,那么就必须采取动态创建的方法,而且必须修改它的CreateParams,把它的Param.WndParent设置为GetActiveWindow即可。
//-----------------------------------------------------------------------
form的问题是可以解决了,但是messagledlg的却是怎么实现这种效果的??请问高手!!!
解决方案 »
- delphi 2010的INTERBASE不能用呀?
- 如何得知当前鼠标处于TCursor的哪种状态?
- 今天写2004年的工作总结报告,期望考核通过!^_^
- 哪里有delphi7下?第一个给出能下的得50,其余大家分
- 请问大家谁有用delphi编写的工作日志程序的源码?我有急用,谢谢
- 两个以上的多客户端连接出现‘Name not unique in this context’错误???
- TADOQuery的sql查询问题!
- 熟悉ACM控件的大虾进来!
- 表里有个date类型字段,怎么找出时间属于当月的记录,sql怎么写
- 在看书时,遇到看不懂的地方,请各位指教
- Eastunfail(恶鱼杀手)请进,补分,感谢您上次回答语言代码的问题
- 求救,关于SPCOMM应用出错帮忙,马上给分,在线。拜谢
procedure TForm2.Button1Click(Sender: TObject);
var MsgHandle:HWND;
begin
MsgHandle:=GetDesktopWindow;
messagebox(MsgHandle,'test','title',MB_OK);
end;
MessageBox(frm_form1.Handle, 'hello', 'abc', 0);messagledlg的话你可以自己另外做个窗体来解决。
form1:主窗体
form2:一个NORMAL窗体,showmodal或者bringtofront;在form2(form2要特殊处理,使得在任务栏上有按钮,方法请看原贴连接)上面有一个按钮,点击则showmessage('')
此时,切换到其它其它应用程序再重新进去DELPHI程序,发现showmessage得窗体被form2
覆盖,就是要解决这个问题,如何不让showmessage()不被form2覆盖,谢谢.
将Dialogs.PAS中的TMESSAGEFORM.CREATENEW的CREATENEW的中添加
Params.WndParent := GetDesktopWindow;
生成DCU,重新编译.
但是Messagebox是API,这样就不行了.
我按你说的情况试了一下,就是这样的,切换回来后消息框是在form2之上的。
MessageBox(form2.Handle, 'hello', 'abc', 0);
直接MessageBox(GetDesktipWindow, '', '', MB_OK)就可以了
早知道全部都用messagebox弹出对话框架了...再次感谢死树
直接MessageBox(GetDesktipWindow, '', '', MB_OK)就可以了
///////////////
楼上这句话好想很有道理;
你想要你的窗口挡在谁的前面,就把它的父句柄设成谁就可以了。OVER。