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 に答える