MS WIN32 SDK:
SetWindowPos(&wndTopMost, 0, 0, 0, 0,SWP_NOSIZE | SWP_NOMOVE);
SetWindowPos(&wndTopMost, 0, 0, 0, 0,SWP_NOSIZE | SWP_NOMOVE);
解决方案 »
- 简单SQL语言
- 关于tchart画图
- 如何判断是否assign了文件?
- 如何用一个父类变量在不同的时间做为不同的子类。。。。该是这么说吧
- 怎样在我的程序中接收另一个应用程序发来的自定义消息?(在线等待..)
- 在局域网中查询IP地址
- 大家好!我是初学者,问一个关于目录操作的问题,谢谢
- 我的dbcombobox的style属性是dropdown,readonly=false,但为什么不能编辑呢?
- 请问“键列信息不足或不正确,更新影响到过多的行”是什么意识?
- 请问如何象JetCar那样实现文件的分段同步下载
- 那里能下载 BoundsChecker for Delphi 这个
- 为什么有时能切换出汉字输入法,而有时就不能?
SetWindowPos(Handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE); 取消在最前面
这个form便不到最前面了
to:carmack
假如有form1,form2,将form2设置成总在最前面
setwindowpos函数应该怎么用?
请写段代码好吗?
我用你的方法试了还是只能对本应用程序起作用,不能象netants的小浮动窗口一样,在
主窗口最小化后,仍然保持显示,而且还能放在其它应用程序窗口前,能反BCB例子
或delphi例子给一个吗,谢谢
做拖动。TImage可以是一只蚂蚁。 :)
procedure TFormMain.ImageCatAniMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
Sc_DragMove = $f012;
begin
if Shift = [ssLeft] then
begin
ReleaseCapture;
TControl(Self).Perform(WM_SYSCOMMAND, Sc_DragMove, 0);
end;
end;(3)
(2)在FormMain的Active事件把FormMain大小设置为和上面的TImage一样大。
procedure TFormMain.FormActivate(Sender: TObject);
begin
Self.Width := ImageCatAni.Width;
Self.Height := ImageCatAni.Height;
Self.Top := Screen.Height - Self.Height - 30;
Self.Left := 2;
Self.Update;
end;(3) FormCreate事件加入:
Self.BorderIcons := [];
Self.BorderStyle := bsNone;
可是如果假设mainform为主窗口时,在mainform上打开myform
即myform.show,就不行了,还是不行,只打开其它应用程序或
切换到其它应用程序一样不能放在其它应用程序窗口前面,但
切换到mainform时,就行了,不知为什么?而且当主窗口mainform
最小化时,myform也随之隐藏了.
virtual void __fastcall CreateParams(TCreateParams & Param);void __fastcall TForm2::CreateParams(TCreateParams & Param)
{
//调用基类
TForm::CreateParams(Param); //去掉窗口标题区
Param.Style=Param.Style & ~WS_CAPTION;
Param.Style=Param.Style ¦ WS_POPUP;
//设为总在最上面
Param.ExStyle=Param.ExStyle ¦ WS_EX_TOPMOST;
//设Windows Owner为Desktop Window
Param.WndParent=GetDesktopWindow();
}注意:
1、Windows Owner与Windows Parent不同,用::SetParent函数和设置Form?->Parent这能设置Windows Parent,不能设置Windows Owner,要实现FlashGet的悬浮窗必须要设置Windows Owner。
2、Form的BorderStyle要设为bsToolWindow,不然在任务栏上会显示出这个窗口的标题,将Caption设为空也没有用。 这个问题问过很多遍了。
仅仅将窗口属性设为bsTopMost是不行的,这只能在本应用程序内起作用,因为当TApplication收到WM_SYSCOMMAND,SC_DEACTIVEAPP(好像是这个东西)消息时,会先调用NormalizeTopMost,去掉所有属于它自己的Form的TopMost属性,这一点非常讨厌,这就是为什么当你的Form设为bsTopMost后只能作用于自己的应用程序的原因。
另外,当Window's Owner最小化时,你的窗口会被hidden,而且收不到WM_SHOW...消息或WM_SYSCOMMAND,SC_ICON消息。所以一定要将Windows' owner设为NULL或Desktop。
谢谢你的讲解,我很笨,你的例子我不能转成delphi语言,能否帮忙解决,我才能试一试了
procedure CreateParams(var Param:TCreateParams); override;procedure TForm1.CreateParams(var Param:TCreateParams);
begin
//调用基类
inherited CreateParams(Param); //去掉窗口标题区
Param.Style:=Param.Style and (not WS_CAPTION);
Param.Style:=Param.Style or WS_POPUP;
//设为总在最上面
Param.ExStyle:=Param.ExStyle or WS_EX_TOPMOST;
//设Windows Owner为Desktop Window
Param.WndParent:=GetDesktopWindow();
end;
还有一种比较弱智的方法,是用timer去定时去setwindowpos....不过呢,比较耗费资源,
但可以顺便实现一些很有用的功能:如自动贴边,自动隐藏等。时间设为大概400ms就看不出任何停滞。to SAsura(SAsura):
这种方法我知道,可是我没自己试过,请问在主程序退出时,需不需要向那个alwaysontop
并且脱离父子关系的窗体发送一个WM_CLOSE消息?