与其试图TApplication
在网格控件的事件中强制显示新的提示OnMouseMove
,正确的方法是让网格处理CM_HINTSHOW
消息以在正常显示时自定义当前提示。
该CM_HINTSHOW
消息为您提供了指向其值 THintInfo
中记录的指针。有一个成员可以告诉您当前鼠标在控件客户区内的位置,以及一个允许您在控件客户区内定义当前提示应该有效的矩形的成员(还有其他用于进一步自定义提示的成员,suh作为文本、颜色、窗口类、显示/隐藏超时等)。当鼠标移出该矩形但仍在控件的客户区域内时,将再次生成消息以获取新信息以更新当前提示。 LPARAM
THintInfo
CursorPos
CursorRect
THintInfo
CM_HINTSHOW
如果您需要在每次鼠标移动时更新提示,您可以定义一个CursorRect
只包含 current的自定义CursorPos
,例如:
type
TMyGrid = class(...)
private
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
end;
procedure TMyGrid.CMHintShow(var Message: TCMHintShow);
begin
with Message.HintInfo^ do
begin
HintStr := Format('Hint Text (%d,%d)', [CursorPos.X, CursorPos.Y]);
CursorRect := Rect(CursorPos.X, CursorPos.Y, CursorPos.X, CursorPos.Y);
end;
end;