我有以下代码尝试显示提示:

procedure TMyGrid.OnGridMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  aPoint: TPoint;
begin
  inherited;
  //Application.Hint := 'Hint Text';
  //Application.ShowHint := True;
  Grid.Hint := 'Hint Text';
  Grid.ShowHint := True;
  aPoint.X := X;
  aPoint.Y := Y;
  Application.ActivateHint(aPoint);
end;


但是没有任何提示出现。怎么了?

最佳答案

ActivateHint希望您的点位于屏幕坐标,而不是客户端坐标。

从文档:


ActivateHint将控件或菜单​​项定位在CursorPos指定的位置,其中CursorPos表示以像素为单位的屏幕坐标。找到控件后,ActivateHint在提示窗口中显示控件的提示。


因此,您必须像这样更改方法:

procedure TMyGrid.OnGridMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  aPoint: TPoint;
begin
  inherited;
  //Application.Hint := 'Hint Text';
  Grid.Hint := 'Hint Text';
  Grid.ShowHint := True;
  aPoint.X := X;
  aPoint.Y := Y;
  aPoint := ClientToScreen(aPoint);
  Application.ActivateHint(aPoint);
end;

07-26 04:54