在代码中突出显示TGrid行

Highlighting TGrid row in code

本文关键字:显示 TGrid 代码      更新时间:2023-10-16

我有一个自定义的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();

你必须为TGrid组件启用以下选项:

1) RowSelect = True2) AlwaysShowSelection = True

与Delphi XE8测试-工作良好。我的代码:

procedure TForm1.Grid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
  Grid1.SelectRow(Grid1.RowByPoint(X, Y));
end;

如果你需要,我也可以给你提供DFM文件