本文整理自网络,侵删。
浮动窗体的实现
需要一个这样的窗体:
a:没有标题栏; b:可以改变大小; c:不在任务栏上显示图标; d:如果不是主窗体,它的最小化不受主窗体的限制; e:在最顶端显示
处理:
a:不在任务栏出现的,只要设置窗体的属性为ToolWindow就可以了.
b:要想使窗体脱离主窗体的限制,必须修改它的ParentWnd,使用SetParent显然有些问题.可以通过重载CreateParams方法来实现.
如下:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
//Params.Style := (Params.Style or ws_Popup) and (not ws_Caption);
Params.Style := Params.Style and (not WS_CAPTION) and (not WS_BORDER);
Params.Style := Params.Style or WS_POPUP or WS_THICKFRAME or WS_CLIPCHILDREN;
end;
在DELPHI中如何开发类似《网络蚂蚁》中悬浮窗口?
protected:
virtual void __fastcall CreateParams(TCreateParams & Param);
void __fastcall TForm1::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 WINDOWS
Param.WndParent=GetDesktopWindow();
}
注意:1.Windows Owner与Windows Parent不同,用::SetParent函数和设置
Form?->Parent只能设置Windows Parent,不能设置Windows Owner,
要实现FlashGet的悬浮窗必须要设置Windows Owner。
2.Form的BorderStyle要设为bsToolWindow,不然在任务栏上会显示出这个窗口的标题,
将Caption设为空也没有用。
相关阅读 >>
更多相关阅读请进入《Delphi》频道 >>