DBGrid色づけ

解決


カラフル  2010-02-06 10:17:43  No: 37478

DBGRIDのテーブルのある項目に、「成功」と文字が入っているところの行に色をつけたいと思っています。

DRAWCOLUMNのところに
IF FIELDBYNAME('EXAM').ASSTRING = '成功' THEN
 BEGIN
   CANVAS.BRUSH.COLOR := CLYELLOW;
   DEFAULTDRAWCOLUMNCELL(RECT,DATACOL, COLUMN,STATE;
 END;

と書き、実行しても色が変わりません。アドバイスいただけないでしょうか?


Kenny  2010-02-06 17:49:13  No: 37479

これでどうですか? DBGridの名前はそちらに合わせてくださいね。

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.Field.AsString= '成功' then
    DBGrid1.Canvas.Brush.Color:= clYellow;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


Kenny  2010-02-06 19:10:01  No: 37480

ちょいと訂正。
「成功」が入っているセルだけの色を変えるなら
begin
  if Column.Field.AsString= '成功' then begin
    DBGrid1.Canvas.Brush.Color:= clYellow;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
  end
end;

「成功」が特定のセルに入っている場合、行全部の色を変えるなら
begin
  if Column.Field.DataSet.Fields[どこか].AsString  ='成功' then begin
    DBGrid1.Canvas.Brush.Color:=clYellow;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end
end;

ですね。この場合の「Fields[どこか]」は、値「成功」を納めているFieldを指定してください。


カラフル  2010-02-06 19:59:56  No: 37481

助かります。
ちなみに、DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);は何を意味しているのでしょうか?参考書などにも載っていたのですが。


Kenny  2010-02-06 20:31:29  No: 37482

>ちなみに、DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);は何を意味しているのでしょうか

DefaultDrawColumnCellイベントは、セルを描くときに発生するのですが、そのタイミングで
Brushの色を変えてももう描いた後なので、もう一度DefaultDrawColumnCellを呼び出して描き直す
訳です。たぶん(^^;。
試しにその行をコメントアウトすると何も起きなくなりますね。


カラフル  2010-02-12 00:30:34  No: 37483

記述どおりに実行したら、うまくいきました。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加