1

dgRowSelect = Falseの場合、OnDrawColumnCellメソッド内で選択した行を検出するにはどうすればよいですか?

選択したセルではなく、選択したセルを含む行。

4

1 に答える 1

8

以下のコードは機能しているようです。は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ます。ただし、選択されていない行の現在のセルが選択された行の色と正確に一致していたため、混乱していました。隣同士だと視覚的に邪魔でした。

于 2012-12-11T21:53:04.163 に答える