根据每个单元格的显示数值,控制其颜色,这个用dbgrid,stringgrid都可以,只要在它们的OnDrawColumnCell中刷新底色即可。类似这样在单元格重绘事件中处理: procedure Tform1.DBGrid1DrawColumnCell; begin with (Sender as TDBGrid) do begin if xxxx then begin Canvas.Font.Color := clHighlightText; Canvas.Brush.Color := clHighlight; end else begin Canvas.Font.Color := clBlack; Canvas.brush.Color := clWhite; end; DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end;
procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var str1:tadoquery; str2:tdbgrid; begin str1:=adoquery8; str2:=dbgrid8; if str1.FieldByName('Storage_Flg').AsInteger=1 then begin str2.Canvas.Brush.color:=clwhite; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=2 then begin str2.Canvas.Brush.color:=clyellow; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=3 then begin str2.Canvas.Brush.color:=clred; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=4 then begin str2.Canvas.Brush.color:=clFuchsia; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=5 then begin str2.Canvas.Brush.color:=clAqua; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=6 then begin str2.Canvas.Brush.color:=clBlue; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=7 then begin str2.Canvas.Brush.color:=clGray; str2.Canvas.Font.Color:=clwindowtext; end; if str1.FieldByName('Storage_Flg').AsInteger=8 then begin str2.Canvas.Brush.color:=clLime; str2.Canvas.Font.Color:=clwindowtext; end; str2.Canvas.pen.mode:=pmmask; str2.DefaultDrawColumnCell(rect,datacol,column,state); end;
const Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime); procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : integer; begin i := adoquery8.FieldByName('Storage_Flg').AsInteger; if (i >=1) and (i <= 8) then dbgrid8.Canvas.Brush.color:= MyColor[str1.FieldByName('Storage_Flg').AsInteger]; dbgrid8.Canvas.Font.Color:=clwindowtext; dbgrid8.Canvas.pen.mode:=pmmask; dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state); end;
const Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime); procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : integer; begin i := adoquery8.FieldByName('Storage_Flg').AsInteger; if (i >=1) and (i <= 8) then dbgrid8.Canvas.Brush.color:= MyColor[i]; dbgrid8.Canvas.Font.Color:=clwindowtext; dbgrid8.Canvas.pen.mode:=pmmask; dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state); end;
这个程序的图片链接,发不出来,麻烦各位点链接看下
这是我做的,不过效果不太好,用了8个dbgrid,求指教
procedure Tform1.DBGrid1DrawColumnCell;
begin
with (Sender as TDBGrid) do
begin
if xxxx then
begin
Canvas.Font.Color := clHighlightText;
Canvas.Brush.Color := clHighlight;
end
else
begin
Canvas.Font.Color := clBlack;
Canvas.brush.Color := clWhite;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
str1:tadoquery;
str2:tdbgrid;
begin
str1:=adoquery8;
str2:=dbgrid8;
if str1.FieldByName('Storage_Flg').AsInteger=1 then begin
str2.Canvas.Brush.color:=clwhite;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=2 then begin
str2.Canvas.Brush.color:=clyellow;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=3 then begin
str2.Canvas.Brush.color:=clred;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=4 then
begin
str2.Canvas.Brush.color:=clFuchsia;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=5 then
begin
str2.Canvas.Brush.color:=clAqua;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=6 then
begin
str2.Canvas.Brush.color:=clBlue;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=7 then
begin
str2.Canvas.Brush.color:=clGray;
str2.Canvas.Font.Color:=clwindowtext;
end;
if str1.FieldByName('Storage_Flg').AsInteger=8 then
begin
str2.Canvas.Brush.color:=clLime;
str2.Canvas.Font.Color:=clwindowtext;
end;
str2.Canvas.pen.mode:=pmmask;
str2.DefaultDrawColumnCell(rect,datacol,column,state);
end;
Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime);
procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
i : integer;
begin
i := adoquery8.FieldByName('Storage_Flg').AsInteger;
if (i >=1) and (i <= 8) then
dbgrid8.Canvas.Brush.color:= MyColor[str1.FieldByName('Storage_Flg').AsInteger];
dbgrid8.Canvas.Font.Color:=clwindowtext; dbgrid8.Canvas.pen.mode:=pmmask;
dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state);
end;
const
Mycolor : Array[1..8] of Tcolor = (clWhite,clBlack,clred,clFuchsia,clAqua,clBlue,clGray,clLime);
procedure Tjkcpcs.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
i : integer;
begin
i := adoquery8.FieldByName('Storage_Flg').AsInteger;
if (i >=1) and (i <= 8) then
dbgrid8.Canvas.Brush.color:= MyColor[i];
dbgrid8.Canvas.Font.Color:=clwindowtext; dbgrid8.Canvas.pen.mode:=pmmask;
dbgrid8.DefaultDrawColumnCell(rect,datacol,column,state);
end;
try
jkcpcs.ADOQuery3.DisableControls;
finally
jkcpcs.ADOQuery3.EnableControls
end;
这个也用了,还是没效果,求助中。
你换成advstringgrid,然后用
advGrid.BeginUpdate ;advGrid.EndUpdate;
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
end;