dgRowSelect = Falseの場合、OnDrawColumnCellメソッド内で選択した行を検出するにはどうすればよいですか?
選択したセルではなく、選択したセルを含む行。
以下のコードは機能しているようです。はTDBGrid
引き続きSelectedRows
更新されます (有効にしないと描画されませんdgRowSelect
が) ため、描画コードでそれらにアクセスできます。( は必要ありませんが、有効dgMultiSelect
にする必要dgRowSelect
があります。)
Canvas.Brush.Color
このコードでは、選択した行に を設定するだけで、グリッドがすべての描画を行うことができます。指定された色は、そのセルの状態がたまたまgdSelected
.
選択した行の色を に設定し、clFuchsia
わかりやすくするために選択したセルだけをデフォルトの色のままにしました (グリッドは選択した行では見苦しくなりclFuchsia
ますが、実証するには機能します)。
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer;
Column: TColumn; State: TGridDrawState);
var
Selected: Boolean;
Grid: TDBGrid;
begin
Grid := TDBGrid(Sender);
if not (gdSelected in State) then
begin
Selected := Grid.SelectedRows.CurrentRowSelected;
if Selected then
Grid.Canvas.Brush.Color := clFuchsia;
end;
Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
1 行目と 3 行目が選択された上記のサンプル結果:
もちろん、通常の選択された色をそのまま使用することもできclHighLight
ます。ただし、選択されていない行の現在のセルが選択された行の色と正確に一致していたため、混乱していました。隣同士だと視覚的に邪魔でした。