こんばんは。
いつもお世話になっています。
DBGridの選択したセルの値を
Editに表示するプログラムを作りました。
その時、DBGridのプロパティdgRowSelectをFalseにしていました。
プログラムを使用する人から選択行にも色をつけた方が見やすいと要望があり
試行錯誤しているのですができません。
このようなことは可能でしょうか。
そのdgRowSelectをオンにすれば解決というわけではないのでしょうか。
あさんお返事ありがとうございます。
dgRowSelectをtrueにすると
選択したセル値の取得ができませんでした。
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;
igyさんご案内ありがとうございます。
ご指導いただきましたコード通りにすると
要望通りの動作ができました。
DataSourceのDataChangeイベントを始めて使いました。
大変勉強になりました。
本当にありがとうございます。
> そのdgRowSelectをオンにすれば解決というわけではないのでしょうか。
DBGrid( TDBGrid) には「セルの値」というのはありません.
「セルの値」というのはデータセットの項目 (フィールド) の値の意味で使われています.
したがつて,dgRowSelect の値が True でも False でも
項目名または項目のインデックスを指定して「セルの値」は取得できます.
クリックしたセルの背景色を変えたいというのであれば,背景色を変更します.
そのサンプルです.
http://mrxray.on.coocan.jp/Delphi/zip/TDBGrid_dgRowSelect_SelCol.zip
# 後から「それだと・・・」というのは反則技ですけどね・・・
http://mrxray.on.coocan.jp/Delphi/zip/TDBGrid_dgRowSelect_SelCol.zip
実務でこんな面倒なことをする必要はありませんね.
> dgRowSelectをtrueにすると
> 選択したセル値の取得ができませんでした。
という書き込みがあったので,そんなことないでしょう.ということです.
ツイート | ![]() |