如何在鼠标位置检测 ControlList 的行

How to detect the row of a ControlList at mouse position

我想更改 ControlList 的提示,检测鼠标悬停在哪一行,例如提示可以是 'Row 6'

我知道我可以使用 TStringList 执行此操作,如下例所示。

TStringList 示例:

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Col, Row: Integer;
begin
  StringGrid1.MouseToCell(X, Y, Col, Row);
  StringGrid1.Hint := IntToStr(Col) + '   ' + IntToStr(Row);
end; 

控件列表示例:

procedure TForm1.ControlList1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
    var
   Row: Integer;
    begin
       ControlList1.  <--------Looking for something like Mouse to Row
       ControlList1.Hint := IntToStr(Row);
    end;

仅供参考,ControlList BeforeDraw Item AIndex 可用。获得 AIndex 或 Row 会很棒。

ControlList1BeforeDrawItem(
  AIndex: Integer; ACanvas: TCanvas; ARect: TRect; AState: TOwnerDrawState);

TControlList 为此公开了一个 属性 HotItemIndex