我有三个form:from1、form2和form3(form1是mainform)。想要使这三个窗体的关系永远保持(从前往后)form3、form1、form2(即不论哪个窗体得到焦点,都不会改变前后次序)。不能使用parent,因为这三个窗体都是不规则窗体。请问有没有什么好办法,先谢过了。

解决方案 »

  1.   

    在 form1 和 form2 的 OnActivate 事件(最好是获得焦点事件)中写:
      form2.BringToFront;
      form1.BringToFront;
      form3.BringToFront;
      

  2.   

    To hiflower(花):我目前是在OnActivate事件中写SetWindowPos()函数,但这样效果不好,当焦点在两个form间切换时,原本在后面的那个窗体会闪出来一下,很难看。有没有什么办法可以不出现这种情况?
      

  3.   

    除了parent还有别的好法子么?我觉得用parent听好的啊
      

  4.   

    To Delphing(卓※黛): 我是用SetWindowRgn函数来显示窗体,所以parent肯定不能用。
      

  5.   

    To samcrm(阿靖)可以说得具体些吗?
      

  6.   

    那可不可以让下面两个窗体 Disable 呢,这样它们就得不到焦点了
      

  7.   

    不行,就是因为要用到那两个窗体,所以才伤脑筋。要在切换焦点的时候,不会引发这几个窗体的bring to front 就好了。
      

  8.   

    没用过SetWindowRgn
    楼主能解释一下为什么要用这个函数吗.
    看帮助,像是局限窗体的显示区域..那为什么就不能用parent了,谁解释给我听啊
      

  9.   

    to microjuz(天才弟弟):SetWindowRgn的确是控制窗体的显示区域,这样就可以得到不规则窗体。至于为什么就不能用parent了,你试一下让父窗体比子窗体小的情况,就会明白了。我显示在后面的那个窗体比较小,不然我早就用这法子了。哎......
      

  10.   

    TForm2 = class(TForm)
      protected
        procedure CreateParams(var Params:TCreateParams); override;
      end;procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.WndParent  :=  Form1.Handle;//如果是Form3,改为Form2.Handle;
    end;
      

  11.   

    收回前言!!ysai大虾:再请教一下,用两个form时,完全达到我想要得,呀,太开心了~~~~~,但是第三个form要怎么办呢?按照您的程序,form2在form1上,我想再弄一个form3在form1之下该怎么办?我把这段程序放在form1中,结果一运行就出错...
    再帮一下忙,分一定给你!在线等...
      

  12.   

    把Form1 和 Form3 的 FormStyle := fsStayOnTop;
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      if Form3 <> nil then
        Form3.BringToFront;
    end;这样可以做到,但是可能会引起别的问题,请楼主在出现问题时自己解决一下了。
      

  13.   

    解决了,是mainform的问题。mainform下不能有form,把最下面的那个设成mainform就行了!困扰已久的问题终于解决了,太感谢ysai大侠了!结贴!结贴!