---------------單格顏色

procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);

begin

if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value='0') then begin

AColor:=clRed; //背景 AFont.Color:=clBlack; //字體

end;

if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value>'12') then begin

AColor:=clGreen; AFont.Color:=clBlue;

end;

if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value>'20') then begin

AColor:=clBackground; AFont.Color:=clCaptionText;

end;

-----------列顏色

如果dxDBGrid不分組:
procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: string;var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;var ADone: Boolean);
begin
if ANode.Values[i] = 1 then
begin
AColor := clRed;
end;
end;

i為你的type字段在dxDBGrid中的位置,第一列為0,依此類推

/---------------------

如果dxDBGrid採用了分組,那麼以上方法就不行了,會出錯。因為這時候不管你ANode.Values[i]中i為什麼值,結果總是分組那一列的值。不知有沒有高手解決了這個問題。我採用了一個笨辦法實現了顏色的變化,雖然笨,但效果還湊合。
在變色條件列上寫該列的一個事件:
procedure TForm1.dxDBGrid1typeCustomDrawCell(Sender: TObject;ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;var AText: String; var AColor: TColor; AFont: TFont;var AAlignment: TAlignment; var ADone: Boolean);
begin
if ANode.Values[i] = 1 then
begin
AColor := clRed;
end;
end;
這樣,type這一列的顏色就達到要求了;
接下來,把所有列的CustomDrawCell事件都關聯到dxDBGrid1typeCustomDrawCell事件,OK!

第二種情況,把事件寫在列事件CustomDraw裡面也可以

//第二種方式

procedure Tfrm_yljg_cx.dxGridCustomDrawCell(Sender: TObject;ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;var AText: string; var AColor: TColor; AFont: TFont;var AAlignment: TAlignment; var ADone: Boolean);
begin
inherited;
if ANode.Strings[dg.ColumnByName('dgColumn13').Index] = '0' then
AColor:=clFuchsia;
end;

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 None 的頭像
    None

    Record

    None 發表在 痞客邦 留言(0) 人氣()