//------------------------------------------------------------------------
我想让我做的应用的各个子窗口都单独打开,而不是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的却是怎么实现这种效果的??请问高手!!!

解决方案 »

  1.   

    呵呵,比如showmessage出来后,切换窗体,后showmessage的窗体会被盖住,导致.....不好.
      

  2.   

    原理是这样的,SHOWMESSAGE出来的窗体父亲就是主窗体,我的意思是要把showmmessage的窗体父亲变为当前活动的窗体(getactivewindow)....就是如此,这位继续发表高见
      

  3.   

    我还是不明白你到底要知道什么,而且你说的什么让Form2显示在Form1上面,很容易啊
      

  4.   

    不太明白楼主的意思。看看下面是不是楼主想要的呢!
    procedure TForm2.Button1Click(Sender: TObject);
    var MsgHandle:HWND;
    begin
        MsgHandle:=GetDesktopWindow;
        messagebox(MsgHandle,'test','title',MB_OK);
    end;
      

  5.   

    那就不要用ShowMessage,用API:
    MessageBox(frm_form1.Handle, 'hello', 'abc', 0);messagledlg的话你可以自己另外做个窗体来解决。
      

  6.   

    就象死树说的一样,使用MESSAGEBOX,使用MESSAGEDLG就不太好解决了!
      

  7.   

    不好意思,可能没写清楚.
    form1:主窗体
    form2:一个NORMAL窗体,showmodal或者bringtofront;在form2(form2要特殊处理,使得在任务栏上有按钮,方法请看原贴连接)上面有一个按钮,点击则showmessage('')
    此时,切换到其它其它应用程序再重新进去DELPHI程序,发现showmessage得窗体被form2
    覆盖,就是要解决这个问题,如何不让showmessage()不被form2覆盖,谢谢.
      

  8.   

    使用 MessageDlg也可以解决,就是使用回调函数。
      

  9.   

    MessageDlg得问题我已经解决:如下:
    将Dialogs.PAS中的TMESSAGEFORM.CREATENEW的CREATENEW的中添加
    Params.WndParent := GetDesktopWindow;
    生成DCU,重新编译.
    但是Messagebox是API,这样就不行了.
      

  10.   

    我怎么按照你的说法做结果是你希望的结果啊,就是Form2显示在任务栏,并且在切换到其他程序后从Form2显示的ShowMessage对话框并不会被Form2所覆盖啊
      

  11.   

    就是用MessageBox呀,指定hWnd参数为form2.handle就可以了,
    我按你说的情况试了一下,就是这样的,切换回来后消息框是在form2之上的。
    MessageBox(form2.Handle, 'hello', 'abc', 0);
      

  12.   

    messagebox如死树所说,可以解决,谢谢死树,呵呵...
      

  13.   

    MessageBox的参数中有handle 句柄
    直接MessageBox(GetDesktipWindow, '', '', MB_OK)就可以了
      

  14.   

    手提电脑兄:不要按Tab+CTRL来切换...
    早知道全部都用messagebox弹出对话框架了...再次感谢死树
      

  15.   

    MessageBox的参数中有handle 句柄
    直接MessageBox(GetDesktipWindow, '', '', MB_OK)就可以了
    ///////////////
    楼上这句话好想很有道理;
      

  16.   

    你这个问题很简单,就是窗口的父句柄是谁的问题。
    你想要你的窗口挡在谁的前面,就把它的父句柄设成谁就可以了。OVER。