可能重复:
How to prevent form from being activated when the users clicks on it?
我的意思是,我想创建一个看起来像工具提示窗口的弹出窗口。我正在使用ShowWindow
和SetWindowPos
来显示和设置其位置。我已经尝试了SW_SHOWNOACTIVE
,它在弹出窗口出现时非常适合;但是当我点击弹出窗口时,它会聚焦,我不希望这种情况发生。此外,当这个弹出窗口可见时,无论它是否聚焦,都不会向其后面的窗口发送任何消息。
我实际上是在编写一个Object Inspector组件,对于long值,当鼠标悬停一个long值时,它必须显示一个工具提示。我希望这个工具提示看起来像一个普通的工具提示。我不想直接使用Windows工具提示而不是Delphi Tooltip。我想用自己的窗户。
P.S。我认为这个问题很常见,我搜索过,但是我找不到与我的问题完全匹配的答案。
提前致谢。 Javid
答案 0 :(得分:1)
试试这个:
TMyTooltipWindow = class(TCustomControl)
private
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TMyTooltipWindow.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_BORDER;
Params.ExStyle := WS_EX_TOOLWINDOW;
Params.WindowClass.style := Params.WindowClass.style + CS_SAVEBITS;
end;
procedure TMyTooltipWindow.WMMouseActivate(var Message: TWMMouseActivate);
begin
inherited;
Message.Result := MA_NOACTIVATE;
end;
procedure TMyTooltipWindow.WMNCHitTest(var Message: TWMNCHitTest);
begin
// this will make your window transparent for clicks
Message.Result := HTTRANSPARENT;
end;
这不允许用鼠标激活窗口。
另外在Controls.pas中查看 THintWindow 可能会有所帮助。