在使用WINAMP时,我们点下置顶,则WINAMP的主窗口、列表窗口、均衡窗口等都会置顶。我弄了个软件,其中有两个窗口,我使用Form1.FormStyle:=fsStayOnTop;Form2.FormStyle:=fsStayOnTop;并不能实现两个窗口都置顶。我在:
Application.OnDeactivate加入
Form1.FormStyle:=fsNormal;
Form1.FormStyle:=fsStayOnTop;
Form2.FormStyle:=fsNormal;
Form2.FormStyle:=fsStayOnTop;
后,勉强可以置顶,但每次application失去焦点时就会产生一次或多次闪烁,给人一种很不爽的感觉。我在此发过两次帖子奢求指教均未能得到解决方法,我自己“研究”多时也无法找到较好的解决方法,所以
我非常非常迫切您能够给予帮助、指教!或者花点时间帮我试下要怎么实现,好吗?如蒙指教,定当感激不尽!!
Application.OnDeactivate加入
Form1.FormStyle:=fsNormal;
Form1.FormStyle:=fsStayOnTop;
Form2.FormStyle:=fsNormal;
Form2.FormStyle:=fsStayOnTop;
后,勉强可以置顶,但每次application失去焦点时就会产生一次或多次闪烁,给人一种很不爽的感觉。我在此发过两次帖子奢求指教均未能得到解决方法,我自己“研究”多时也无法找到较好的解决方法,所以
我非常非常迫切您能够给予帮助、指教!或者花点时间帮我试下要怎么实现,好吗?如蒙指教,定当感激不尽!!
所有窗体最前的能力时,可以参照下法进行(假定由主窗体事件产生的子窗体为Form2,对应的程序组名为Unit2): 1.在Unit2中窗体类声明public段下定义一个处理过程: procedure AppBringtoTop(Sender:TObject); 2.在Form2的oncreate事件中加入*句如下: procedure Tform2.FormCreate(Sender:TObject); begin Application.OnDeactivate :=AppBringtoTop; //* end; 3.编写AppBringtoTop过程程序如下: procedure TForm2.AppBringtoTop(Seader:TObject); begin SetactiveWindow(Handle); //API函数,将本窗体提至最前 end; ●说明:Application是Delphi对用户创建的应用程序的封装,为TApplication类,如同TForm等一样,TApplication也有其自己的属性与事件定义,其中
Application.OnDeactivate事件在用户开启其他应用程序而将会使本应用程序为Deactivate时产生,正确地对该事件编程即可实现本窗体(Form2)始终位于最前;
另外由于TApplication是不可见控件,同时它的属性与事件均没有列入物体属性栏中,因而需要在程序段中编写代码来进行描述。编写TApplication的事件过程
时要按下述原则进行:A在执行段implementation中编写好事件处理过程;B在interface段中声明该事件处理过程;C在该窗体的FormCreate事件中定义所
需的Application事件响应为B中声明的过程名。
以下是在我的LabelFormUnit中使用的方法
procedure TLabelForm.FixupButClick(Sender: TObject);
begin
if FixupBut.Down then
self.FormStyle := fsStayOnTop
else
self.FormStyle := fsNormal;
end;procedure TLabelForm.FormCreate(Sender: TObject);
begin
Application.OnDeactivate :=AppBringtoTop;
end;procedure TLabelForm.AppBringtoTop(Sender: TObject);
begin
SetActiveWindow(self.Handle);
end;
procedure TfrmFireDeploy.btnBestMapClick(Sender: TObject);
begin
Timer1.Enabled := true;
frmMain.BringToFront;
end;procedure TfrmFireDeploy.Timer1Timer(Sender: TObject);
begin
frmMainBuild.BringToFront;
Self.BringToFront;
Timer1.Enabled := false;
end;
然后SetWindowPos,这样也行吧。