*******多个Form同时保持在最顶层(像winamp)(200分)******** (200分)

  • 主题发起人 主题发起人 aac
  • 开始时间 开始时间
A

aac

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用SetWindowPos(handle,hwnd_TopMost,0,0,0,0,swp_NoMove or swp_NoSize)可以使
主窗体在最上层,但子窗体不能同时保持在最上层?

能否像winamp一样,几个窗体同时在最上层呢?
 
下载第三方控件
 
我希望自己写,如果有控件也最好有源码的?再说,有这样的控件吗?
 
我以前也想过。关注
 
换个思路:
把FORM隐藏掉,在FORM上放PANEL或其它的控件,把它们做成你要的FORM的形状。
 
to dlnew:

晕了,这样骗不了别人吧?我可不想骗自己呀。:)
 
Easy:
TForm1 = Class(TForm)
....
Public
Procedure CreateParams(Var Params: TCreateParams); Override;
End;

Procedure TFormatForm.CreateParams(Var Params:TCreateParams);
Begin
Inherited;
With Params Do
Begin
Style:=WS_BORDER Or WS_SYSMENU Or WS_THICKFRAME;
ExStyle:=WS_EX_TOOLWINDOW;
End;
End;

只要在副窗体中加入上面代码,然后在主窗体中用Show方式将这个窗体显示出来即可

 
忘了说一句:在Dpr文件中应加入:
Form2.ParentWindow:=Form1.Handle;
然后才能Show,这样做的目的是去掉Delphi默认CreateWindowEx时的WS_CHILD选项
 
to: TK128 你的方法不行,我改一下如下就可以了:但有没有更好的方法呀?
TForm1 = Class(TForm)
....
Public
Procedure CreateParams(Var Params: TCreateParams); Override;
End;

Procedure TFormatForm.CreateParams(Var Params:TCreateParams);
Begin
inherited CreateParams( Params);
with params do
begin
ExStyle := Params.ExStyle or WS_EX_TOPMOST or WS_EX_TOOLWINDOW;
WndParent := 0;// 这是必须的,否则当App变为后台时会将该窗体不设置为TopMost
end End;
=============================================
此方法可简单实现,但不灵活,不能像winamp一样在选择不置顶时就会所有窗体全部不置顶。

寻求更完善的方法,有没有高手呀?
 
你仔细看一下API关于窗口函数吧,我认为你需要补习一下基本功了!
全部不置顶是靠SetWindowLong实现的,设置各窗口的Zorder
 
能不能来段代码演示一下?
 
呵呵,这么久还不给我答案,结束算了。谢谢大家 !
 
aac同志。你找到解决的方法了。我也遇到这样的问题了。
ulysses_dm@yahoo.com.cn
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部