0

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

4

1 回答 1

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 文件。

于 2015-06-09T18:35:15.740 回答