SetWindowPos并不是在任何操作系统下都能让窗口始终在最前阿?????? (100分)

  • 主题发起人 主题发起人 iameliza
  • 开始时间 开始时间
I

iameliza

Unregistered / Unconfirmed
GUEST, unregistred user!
SetWindowPos(Handle,HWND_TOPMOST,left,top,width,height,SWP_NOMOVE);
有时候不行?????
 
是不是有的窗口也有hwnd-topmost的属性?
 
你还在什么系统下用这东西了...
 
以前我写的Tips,希望能对您有一些帮助。
如果一个TOPMOST窗口不是MainForm的话,那么即将将它设为总在顶端,它也会随着主窗口的前摆而前摆,后摆而后摆。那么怎么解决这个问题呢?
先将窗口的BorderStyle设为bsNone,FormStyle设为fsStayOnTop。
procedure TForm3.CreateParams(var Params:TCreateParams);
begin
inherited;
with Params do
begin
Style:=Params.Style xor WS_DLGFRAME;
WndParent:=0;//此行
end;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
Width:=36;
Height:=36;
SetWindowLong(Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
 
受益了。
 
当然了,这还用问,想一想都想得到,
 
谢谢大家,可是我是指让自己的程序运行时能始终在其他应用的前面,即使新开个程序。

我在nt,2000,98,95下都试过, 95下一直不行,但是nt下是有时候行,大家遇到过吗??
 
怎么没人说话了??真的不能解决了吗???
 
主 form 的一个什么属性设为 topmost 就可以了,
 
在你的程序的deactive时也要运行一次SetWindowPos, 因为很有可能这是系统是新
运行一个别人的程序, 而正好别人的程序也设置了TopMost. :)
 
同意Another_eYes,如果多个程序都设置了TopMost,操作系统当然是相应最近
的一个。
 
;大家所说的好像都不能解决问题,
据我试验,除了将置前的窗口单独做成可执行或dll再调用可解决不同系统下问题,
其它好像都不解决所有问题.
 
附加功能 将问题提前
 
多人接受答案了。
 
后退
顶部