У меня есть обычай 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 = 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 либо.