【问题标题】:What should I do not to allow a window to be activated? [duplicate]我应该怎么做才能让窗口被激活? [复制]
【发布时间】:2011-08-23 11:03:12
【问题描述】:

可能重复:
How to prevent form from being activated when the users clicks on it?

我的意思是,我想创建一个看起来像工具提示窗口的弹出窗口。我使用ShowWindowSetWindowPos 来显示和设置它的位置。我已经尝试过SW_SHOWNOACTIVE,它非常适合弹出窗口出现的时间;但是当我点击弹出窗口时,它会集中注意力,我不希望这种情况发生。此外,当此弹出窗口可见时,无论它是否获得焦点,都不会向放置在其后面的窗口发送任何消息。

我实际上正在编写一个对象检查器组件,对于长值,它必须在鼠标悬停长值时显示工具提示。我希望这个工具提示看起来像一个普通的。我不想直接使用 Windows Tooltips 而不是 Delphi Tooltip。我想使用自己的窗口。

附:我以为这个问题很常见,我搜索了,但我找不到与我的问题完全匹配的答案。

提前致谢。 贾维德

【问题讨论】:

标签: delphi winapi


【解决方案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 可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多