加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

拦截delphi上的提示事件

发布时间:2020-12-15 09:43:08 所属栏目:大数据 来源:网络整理
导读:我试图在组件内部的运行时临时更改提示文本, 不改变Hint属性本身. 我试过捕捉CM_SHOWHINT,但这个事件似乎只是来了 形式,但不是组件本身. 插入CustomHint也不起作用,因为它需要文本 来自Hint属性. 我的组件是TCustomPanel的后代 这是我正在尝试做的事情: pro
我试图在组件内部的运行时临时更改提示文本,
不改变Hint属性本身.

我试过捕捉CM_SHOWHINT,但这个事件似乎只是来了
形式,但不是组件本身.

插入CustomHint也不起作用,因为它需要文本
来自Hint属性.

我的组件是TCustomPanel的后代

这是我正在尝试做的事情:

procedure TImageBtn.WndProc(var Message: TMessage);
begin
  if (Message.Msg = CM_HINTSHOW) then
    PHintInfo(Message.LParam)^.HintStr := 'CustomHint';
end;

我在互联网上找到了这个代码,不幸的是它不起作用.

解决方法

CM_HINTSHOW确实正是您所需要的.这是一个简单的例子:

type
  TButton = class(Vcl.StdCtrls.TButton)
  protected
    procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
  end;

  TMyForm = class(TForm)
    Button1: TButton;
  end;

....

procedure TButton.CMHintShow(var Message: TCMHintShow);
begin
  inherited;
  if Message.HintInfo.HintControl=Self then
    Message.HintInfo.HintStr := 'my custom hint';
end;

问题中的代码无法调用inherited,这可能是失败的原因.或者类声明省略了WndProc上的override指令.无论如何,我在这个答案中的方式更清晰.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读