如何使子窗体永远保持在最前面,像QQ的上线提示窗口一样呢!? 高手入内吧(100分)

  • 主题发起人 主题发起人 Disguiser
  • 开始时间 开始时间
D

Disguiser

Unregistered / Unconfirmed
GUEST, unregistred user!
QQ的提示窗口永远在最前面不管是看电影还是运行别的什么程序,都是在最前面,不知道是怎么样做成的,希望高手帮忙呀,谢谢!!!!!!!!!!
 
private
procedure SetStayOnTop(Value: Boolean);
property StayOnTop: Boolean write SetStayOnTop;
implementation

{$R *.dfm}
//窗口最上方显示
procedure OSPStayOnTop(Handle: HWND; OnTop: Boolean);
const
csOnTop: array[Boolean] of HWND = (HWND_NOTOPMOST, HWND_TOPMOST);
begin
SetWindowPos(Handle, csOnTop[OnTop], 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;

//窗体是否总在最前面
procedure Tform1.SetStayOnTop(Value: Boolean);
begin
OSPStayOnTop(Handle, Value);
end;

//调用
Self.StayOnTop := True/False

看明白了吗?
 
谢谢你,刚刚试过了,最前面倒是可以实现,但是保持绝对最前面,实现不了
个人认为,保持绝对的最前面就是不管窗口有没有焦点,都是一样的,
各位高手帮忙呀!!!!
 
用timer 调用 Self.StayOnTop := True ?
 
SetWindowPos(form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE);
 
SetWindowPos好像只能置主窗体为最前,副窗体好像就无效了!
 
如果要副窗体一直保留在屏幕最前 ShowModal + SetWindowPos可以了吧。
 
需要个时间触发时时调用
 
SETWINDOWPOS和重写虚函数我都试过了,而且我要创建的子窗口是不能用SHOWMODEL,只能用SHOW,所以不行~
 
后退
顶部