如何固定三个form的叠放层次? 我有三个form:from1、form2和form3(form1是mainform)。想要使这三个窗体的关系永远保持(从前往后)form3、form1、form2(即不论哪个窗体得到焦点,都不会改变前后次序)。不能使用parent,因为这三个窗体都是不规则窗体。请问有没有什么好办法,先谢过了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在 form1 和 form2 的 OnActivate 事件(最好是获得焦点事件)中写: form2.BringToFront; form1.BringToFront; form3.BringToFront; To hiflower(花):我目前是在OnActivate事件中写SetWindowPos()函数,但这样效果不好,当焦点在两个form间切换时,原本在后面的那个窗体会闪出来一下,很难看。有没有什么办法可以不出现这种情况? 除了parent还有别的好法子么?我觉得用parent听好的啊 To Delphing(卓※黛): 我是用SetWindowRgn函数来显示窗体,所以parent肯定不能用。 To samcrm(阿靖)可以说得具体些吗? 那可不可以让下面两个窗体 Disable 呢,这样它们就得不到焦点了 不行,就是因为要用到那两个窗体,所以才伤脑筋。要在切换焦点的时候,不会引发这几个窗体的bring to front 就好了。 没用过SetWindowRgn楼主能解释一下为什么要用这个函数吗.看帮助,像是局限窗体的显示区域..那为什么就不能用parent了,谁解释给我听啊 to microjuz(天才弟弟):SetWindowRgn的确是控制窗体的显示区域,这样就可以得到不规则窗体。至于为什么就不能用parent了,你试一下让父窗体比子窗体小的情况,就会明白了。我显示在后面的那个窗体比较小,不然我早就用这法子了。哎...... 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; 收回前言!!ysai大虾:再请教一下,用两个form时,完全达到我想要得,呀,太开心了~~~~~,但是第三个form要怎么办呢?按照您的程序,form2在form1上,我想再弄一个form3在form1之下该怎么办?我把这段程序放在form1中,结果一运行就出错...再帮一下忙,分一定给你!在线等... 把Form1 和 Form3 的 FormStyle := fsStayOnTop;procedure TForm1.FormActivate(Sender: TObject);begin if Form3 <> nil then Form3.BringToFront;end;这样可以做到,但是可能会引起别的问题,请楼主在出现问题时自己解决一下了。 解决了,是mainform的问题。mainform下不能有form,把最下面的那个设成mainform就行了!困扰已久的问题终于解决了,太感谢ysai大侠了!结贴!结贴! 求李维的VCLinside电子书 大家去看看我今天在dearbook上的发现,NND!发表一下看法,100分相送! 散分:有没有简单的方法添加系统右键菜单? 高手快来帮帮忙呀?数据库复制问题!!! 有關DevExpress的眾多問題 请教BDE配置问题???急急急 怎样判断一个组件已经存在,(按名字来识名) 关联表问题 access的查询功能和SQL SERVER的视图功能一样的吗,视图是不是不可以修改的 急救我!!!送分 TClientDataSet得问题,,在线等,给分。。。。。 紧急求救!如何把Varchar类型的内容变为Image类型。大家关注!
form2.BringToFront;
form1.BringToFront;
form3.BringToFront;
楼主能解释一下为什么要用这个函数吗.
看帮助,像是局限窗体的显示区域..那为什么就不能用parent了,谁解释给我听啊
protected
procedure CreateParams(var Params:TCreateParams); override;
end;procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Form1.Handle;//如果是Form3,改为Form2.Handle;
end;
再帮一下忙,分一定给你!在线等...
procedure TForm1.FormActivate(Sender: TObject);
begin
if Form3 <> nil then
Form3.BringToFront;
end;这样可以做到,但是可能会引起别的问题,请楼主在出现问题时自己解决一下了。