DbGridの特定セルの値の取得


sato  2008-11-18 13:44:25  No: 32617  IP: 192.*.*.*

DBGridに表示されたレコードで、ある列の値が、前の行(レコード)の同じ列の値と同じなら、行全体を、DBGrid1DrawColumnCellで同じ色にしたいのですが、今描画中の行の列の値と、前の行の列の値の取得方法がわかりません。どうすれば、値を取得して比較できるのでしょうか?  
StringGridなら、StringGrid1DrawCellで、if StringGrid1.Cells[0,y]=StringGrid1.Cells[0,y-1] then ...と比較するような場合です。
WinX-P,Delphi7.0です。

編集 削除
HOta  2008-11-19 07:30:00  No: 32618  IP: 192.*.*.*

TDBGridの接続元のTDataSetで比較します。

編集 削除
sato  2008-11-19 12:00:37  No: 32619  IP: 192.*.*.*

HOta様  ありがとうございました。
TDataSet上で最初のレコードから最後まで、項目値を前のレコードの項目値と比較して、結果を変数に保存しておき、DBGrid1DrawColumnCell時、保存した結果を参照し、描画する色を決める、ということでしょうか。
直接、グリッド上の文字列を取得する事はできないのでしょうか。

編集 削除
ofZ  2008-11-19 13:14:49  No: 32620  IP: 192.*.*.*

こんな感じでいかがだろう?

  TForm1 = class(TForm)
  private
    FDataLink  :TDataLink;
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  FDataLink := TDataLink.Create;
  FDataLink.DataSource := DataSource1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FDataLink.Free;
end;

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
  ac, value: Integer;
  sameValue: Boolean;
begin
  //カレントレコード取得
  ac := FDataLink.ActiveRecord;
  //現行値
  value := Field.AsInteger;

  {直前レコードへ移動}
  FDataLink.ActiveRecord := ac - 1;

  if FDataLink.BOF then begin
    sameValue := False;
  end
  else begin
    //直前レコード値と比較
    sameValue := value = FDataLink.DataSet.FieldByName(Field.Name).AsInteger;
  end;
  if sameValue then begin
    //同じ場合の描画
  end
  else begin
    //異なる場合の描画
  end;
  //レコードを戻る
  FDataLink.ActiveRecord := ac;
end;

編集 削除
sato  2008-11-19 14:44:10  No: 32621  IP: 192.*.*.*

ofZ様
ご丁寧にありがとうございました。

編集 削除