如何显示禁用控件的提示?

Jee*_*eva 6 delphi

我有一个复选框,将在运行时启用/禁用.我只想显示启用/禁用的不同工具提示.我正在考虑重写OnMouseEnter事件并在那里处理它,但只有在启用控件时才会调用OnMouseEnter.我怎么可能实现这种行为?任何帮助,将不胜感激.

我试图处理表单的OnMouseMove并执行类似的操作

procedure Tdlg.pnlTopMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);
var
  point: TPoint;
  checkBoxCursorPos: TPoint;
begin
  inherited;
  point.X := X;
  point.Y := Y;
  checkBoxCursorPos := chkBx.ScreenToClient(point);
  if (PtInRect(chkBx.ClientRect, checkBoxCursorPos)) then
  begin
    if(chkBx.Enabled) then
      chkBx.Hint := 'Enabled'
    else
      chkBx.Hint := 'Disabled' ;

    Application.ShowHint := True;
  end;

end;
Run Code Online (Sandbox Code Playgroud)

但条件PtinRect不满意.我做错了什么?

Uwe*_*abe 6

有一个简单的解决方案:在复选框上放置一个空TLabel,并将其提示设置为禁用复选框状态的值.标签必须关闭AutoSize,您可以通过将BoundsRect属性设置为CheckBox的属性来强制执行位置和大小.

启用CheckBox时,将使用复选框的提示,而禁用CheckBox时将使用标签的提示.

更新:刚看到Bummi在评论中提到了类似的想法.

  • 类似但略有不同的方法是将CheckBox放在面板中,将CheckBox`Hint`属性保持为空,将其`ParentHint`属性设置为true,然后使用面板的`Hint`属性(无论是否显示) `CheckBox.Enabled`的值. (2认同)