非常困难,使窗体在最前端显示,简单的用topallmost解决不了问题(对不起,我只有30分了)(30分)

  • 主题发起人 主题发起人 mycwcgr
  • 开始时间 开始时间
M

mycwcgr

Unregistered / Unconfirmed
GUEST, unregistred user!
我想设计一个类似 jatcar、 netants的用户界面
要求:
1、悬浮窗始终在所有应用程序的最前端
2、主窗口是普通窗口,即在点击其它窗口时,主窗口自动在激活窗口的后面
3、悬浮窗始终在主窗口激活的showmodal类型的对话框窗口的前端,此要求是第1条要求的一个补充。
 
不懂!

只对悬浮窗口使用topallmost为什么不行?

用SetWindowPos这个API试试
 
把悬浮窗口的父窗口设成0,再用 setwindowpos
 
请问elan:把悬浮窗口的父窗口设成0是什么意思,您能说得具体一些吗
 
答: hustmouse

只对悬浮窗口使用topallmost为什么不行?
因为,如果从主窗口中用showmodal显示一个子窗口,此窗口将显示在悬浮窗口的前端
 
我是新手,我想知道答案
 
//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;
 
liguang
非常感谢您的帮助!!
但因本人水平有限,还需您进一步点拨

请问:Procedure TForm3.CreateParams(var Params:TCreateParams)

这个过程放在哪个地方执行,参数是什么??
 
放在implementation

{$R *.DFM}
的后面。

TCreateParams is the window-creation parameter record used to specify the type of window to create for a windowed control.

Unit

Controls

type

TCreateParams = record
Caption: PChar;
Style: DWORD;
ExStyle: DWORD;
X, Y: Integer;
Width, Height: Integer;
WndParent: HWND;
Param: Pointer
WindowClass: TWndClass;
WinClassName: array[0..63] of Char;

end;

你查一下帮助。
 
可编写两个程序,其中一个程序显示总在最上的窗口,
其formstyle的值为fsStayOnTop。另一个程序编写处理部分(主窗口)。
两程序要有一定的配合。
 
liguang的程序我还是不明白,
请问谁能解释清查

“可编写两个程序,其中一个程序显示总在最上的窗口,
其formstyle的值为fsStayOnTop。另一个程序编写处理部分(主窗口)。
两程序要有一定的配合”可能不太好协调
 
同意elan,补充如下:
procedure Form1.onActivate(Sender:TObject);
begin
with Form2 do
SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
 
CreateParams是基类的虚函数,用来对窗口进行一些初始化设置。你写的那个版
本只是通过继承的方式来覆盖它,所以只需在自己类的公有部分public中定义一下即
可。
public
{ Public declarations }
procedure CreateParams(var Params:TCreateParams);override;
 
感谢大家,特别是liguang!!

按照liguang的方法基本上达到预期目标,不过还有最后一个问题要解决
即当主窗口上用 showmodal 显示一个子窗口后,那个显示在最顶端的悬浮窗(其
borderstyle:=bssingle)不能被拖动。

 
接受答案了.
 
请教:
第三点如何解决??
 
后退
顶部