Подсветка строки TGrid в коде

У меня есть пользовательский элемент управления 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();


person James Hogle    schedule 08.06.2015    source источник


Ответы (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.

person Zam    schedule 09.06.2015