如何使窗体在鼠标放到标题栏上时显示其上的所有控件,而鼠标离开时隐藏其上的所有控件?(100分)

  • 主题发起人 主题发起人 laokui
  • 开始时间 开始时间
L

laokui

Unregistered / Unconfirmed
GUEST, unregistred user!
在主窗体里放一个窗体,如何使窗体在鼠标放到标题栏上时显示其上的所有控件,而鼠标离开时隐藏其上的所有控件,只剩下标题栏?
 
procedure TForm1.wmhittest(var msg:TMessage);//message WM_NCHitTest;
var i:Integer;
begin
inherited;
for i:=0 to ComponentCount-1 do begin
if msg.Result=htcaption then
if (Components is TWinControl) then
TWinControl(Components).Visible:=true;
if msg.Result<>htcaption then
TWinControl(Components).Visible:=False;
end;
end;
 
TWinControl的话……从TGraphicControl派生的控件显示不出来……
用TControl吧! :P

procedure TForm1.wmhittest(var msg: TMessage);//message WM_NCHitTest;
var
i:Integer;
begin
inherited;

for i:=0 to ComponentCount-1 do begin
if msg.Result = htCaption then
if (Components is TControl) then
TControl(Components).Visible := True;
if msg.Result <> htCaption then
TControl(Components).Visible := False;
end;
end;
 
takashiki :
老兄,我对消息知之甚少。能否给个小例子,俺不胜感激!
 
怎样才能触发消息呢?
 
首先声明
// 截获消息WM_NCHITTEST,窗体标题事件
procedure wmhittest(var msg: TMessage);message WM_NCHitTest;

然后
procedure TForm1.wmhittest(var msg: TMessage);
var
i: Integer;
begin
inherited; // 继承祖先类的方法

for i:=0 to ComponentCount-1 do begin // 遍历窗体所有控件
if msg.Result = htCaption then // 返回HTCAPTION表明鼠标在Windows的标题栏中
if (Components is TControl) then
TControl(Components).Visible := True; // 显示所有TControl类控件

if msg.Result <> htCaption then // 返回非HTCAPTION表明鼠标不在Windows的标题栏中
TControl(Components).Visible := False; // 隐藏所有TControl类控件
end;
end;
 
谢谢啦!接分
 
后退
顶部