我有一个自定义TGrid
控件,我试图这样做,当鼠标悬停在一行上时,该行会突出显示。如果我使用箭头键导航网格,则会自动突出显示行。但是,我不确定如何使用鼠标复制此效果进行导航。
目前,我有一个MouseMove函数,可以检测鼠标悬停在哪一行网格上。
void __fastcall TFmSearchBar::GridMouseMove(TObject *Sender, TShiftState Shift, float X, float Y)
{
int rowSelected = FGrid->RowByPoint(X, Y);
if(rowSelected >= FGrid->RowCount)
rowSelected = FGrid->RowCount - 1;
if(rowSelected != -1)
{
FGrid->SelectRow(rowSelected);
}
}
我原本以为使用SelectRow
函数会达到预期的效果,但是当使用该方法时没有任何反应。另外我尝试使用
FGrid->SelectCell(0, rowSelected);
也不起作用。
我已经通过使用
将鼠标悬停在其上时将行的文本设置为粗体来验证我从函数中获取了正确的行 FGrid->RowObjects[rowSelected]->SetBold();
答案 0 :(得分:1)
您必须为TGrid组件启用以下选项:
1)RowSelect = True 2)AlwaysShowSelection = True
使用Delphi XE8测试 - 工作正常。我的代码:
procedure TForm1.Grid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
Grid1.SelectRow(Grid1.RowByPoint(X, Y));
end;
如果你愿意,我也可以为你提供DFM文件。