关于窗体显示的问题,请各位大侠帮帮。 ( 积分: 100 )

  • 主题发起人 主题发起人 weijxin
  • 开始时间 开始时间
W

weijxin

Unregistered / Unconfirmed
GUEST, unregistred user!
请问有何办法使一个窗体总显示在其它窗体的前面。而焦点可以在其它窗体的上面。
form1,为正常窗体。
foRm2.亦为正常窗体。
FORM3.为fsStayOnTop窗体。
先SHOW FORM1.然后,再在FORM1上SHOWMODAL FORM2.
然后再在FORM2上SHOW FORM3.
但当焦点放回FORM2时,FORM3不显示出是前面。
 
请问有何办法使一个窗体总显示在其它窗体的前面。而焦点可以在其它窗体的上面。
form1,为正常窗体。
foRm2.亦为正常窗体。
FORM3.为fsStayOnTop窗体。
先SHOW FORM1.然后,再在FORM1上SHOWMODAL FORM2.
然后再在FORM2上SHOW FORM3.
但当焦点放回FORM2时,FORM3不显示出是前面。
 
不会吧,
form2.control.SetFocus;
 
不会吧,
form2.control.SetFocus;
如果这样,FORM3就看不到了。
 
应在FORM2上SHOWMODAL FORM3
而不是在FORM2上SHOW FORM3
 
应在FORM2上SHOWMODAL FORM3
如果这样的话,form2就不可以得焦点
我的最终目的是,form3显示在最前面。而我的焦点操作是在FORM2上。
 
那就三个FORM都不要SHOWMODAL,而用SHOW
 
你试过行吗。我试过不行。得不到目的。
 
你有邮箱吗,我发源码给你吧
或者你加我QQ:19613946
 
将FORM1设置为不显示状态,将form2设置为正常状态form3为fsStayOnTop
 
form1可以设为不显示状态。我的FORM1是程序的主窗口。其它窗口是在他的基础上SHOW出来的。form2是用来处理其它事的操作窗口。FORM3是显示一些信息,要在最前面。而得焦是在FORM2上。
 
这个简单,我做过。
你可以用toolbar2000控件完成这个功能。
在窗体上放个TBToolWindow1
procedure TForm1.btn1Click(Sender: TObject);
begin
TBToolWindow1.Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
var p: TPoint;
begin
p.X := 100;
p.Y := 100;
TBToolWindow1.Floating := true;
TBToolWindow1.FloatingPosition := p;
……
运行即可看到效果。
 
这有些资料,你看看吧:
应该这样显示模态窗体:
application.NormalizeAllTopMosts;
ModalForm.ShowModal;
Application.RestoreTopMosts;
使用Delphi本身提供的切换OnTop的属性,可能造成窗体闪烁,可以用API来代替:
SetWindowPos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize);//Set
SetWindowPos(handle,hwnd_notopmost,0,0,0,0,swp_nomove or swp_nosize);//Unset
但是这个方法不适合于二级窗体。
OnTop窗体的一个问题:
Kingron:
例如一个Form1,Form2,Form1中调用Form2:
Hide;
form2.ShowModal;// or Show
这个时候,Form2是不能OnTop的。必须修改代码如下:
try
Hide;
Application.NormalizeAllTopMosts;
LitterWin.ShowModal;
Application.RestoreTopMosts;
finally
show;
end;
而且,在Form2的OnShow中,必须添加代码:
SetWindowPos(handle, hwnd_topmost, 0, 0, 0, 0, swp_nomove or swp_nosize);
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部