DBGridの選択行の色について

解決


ガオ~  2022-05-25 11:15:59  No: 150219  IP: [192.*.*.*]

こんばんは。
いつもお世話になっています。
DBGridの選択したセルの値を
Editに表示するプログラムを作りました。
その時、DBGridのプロパティdgRowSelectをFalseにしていました。
プログラムを使用する人から選択行にも色をつけた方が見やすいと要望があり
試行錯誤しているのですができません。
このようなことは可能でしょうか。

編集 削除
 2022-05-25 20:47:07  No: 150220  IP: [192.*.*.*]

そのdgRowSelectをオンにすれば解決というわけではないのでしょうか。

編集 削除
ガオ~  2022-05-25 21:49:18  No: 150221  IP: [192.*.*.*]

あさんお返事ありがとうございます。
dgRowSelectをtrueにすると
選択したセル値の取得ができませんでした。

編集 削除
igy  2022-05-26 15:03:23  No: 150222  IP: [192.*.*.*]

DBGridは、ほとんど使っていないのですが、
ParadoxならRecNoが使えるので、以下のような感じで、出来るかもしれません。


DBGridのDrawingStyleプロパティにgdsClassicを指定し、
フォームに、SelectRecNoを追加。

type
  TForm1 = class(TForm)
     ・・
  private
    { Private 宣言 }
    SelectRecNo: Integer;
  end;


DataSourceのDataChangeイベントに、

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  SelectRecNo := DataSource1.DataSet.RecNo;
  DBGrid1.Invalidate;
end;


DBGridのDrawColumnCellイベントで、

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    with TDBGrid(Sender) do
    begin
        if (DataSource.DataSet.RecNo = SelectRecNo) and
                not (gdSelected in State) then
        begin
            Canvas.Brush.Color := clSkyBlue;
            Canvas.Font.Color := clBlack;
        end;
        if gdSelected in State then
        begin
            Canvas.Brush.Color := clHighlight;
            Canvas.Font.Color := clHighlightText;
        end;

        DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
end;

編集 削除
ガオ~  2022-05-26 23:34:14  No: 150223  IP: [192.*.*.*]

igyさんご案内ありがとうございます。
ご指導いただきましたコード通りにすると
要望通りの動作ができました。
DataSourceのDataChangeイベントを始めて使いました。
大変勉強になりました。
本当にありがとうございます。

編集 削除
Mr.XRAY  2022-05-28 14:28:59  No: 150224  IP: [192.*.*.*]

> そのdgRowSelectをオンにすれば解決というわけではないのでしょうか。

DBGrid( TDBGrid) には「セルの値」というのはありません.
「セルの値」というのはデータセットの項目 (フィールド) の値の意味で使われています.
したがつて,dgRowSelect の値が True でも False でも
項目名または項目のインデックスを指定して「セルの値」は取得できます. 

クリックしたセルの背景色を変えたいというのであれば,背景色を変更します.
そのサンプルです.

http://mrxray.on.coocan.jp/Delphi/zip/TDBGrid_dgRowSelect_SelCol.zip

# 後から「それだと・・・」というのは反則技ですけどね・・・

編集 削除
Mr.XRAY  2022-05-29 06:33:34  No: 150225  IP: [192.*.*.*]

http://mrxray.on.coocan.jp/Delphi/zip/TDBGrid_dgRowSelect_SelCol.zip

実務でこんな面倒なことをする必要はありませんね.

> dgRowSelectをtrueにすると
> 選択したセル値の取得ができませんでした。

という書き込みがあったので,そんなことないでしょう.ということです.

編集 削除