在代码中突出显示 TGrid 行
Highlighting TGrid row in code
我有一个自定义的 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) 行选择 = 真
2) AlwaysShowSelection = True
使用 Delphi XE8 进行测试——工作正常。我的代码:
procedure TForm1.Grid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
Grid1.SelectRow(Grid1.RowByPoint(X, Y));
end;
如果你需要,我也可以给你DFM文件。
我有一个自定义的 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) 行选择 = 真 2) AlwaysShowSelection = True
使用 Delphi XE8 进行测试——工作正常。我的代码:
procedure TForm1.Grid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
Grid1.SelectRow(Grid1.RowByPoint(X, Y));
end;
如果你需要,我也可以给你DFM文件。