显示数据库表里的内容的时候,如何让它以不同的背景颜色显示每行的内容???(30分)

  • 主题发起人 主题发起人 pckite
  • 开始时间 开始时间
P

pckite

Unregistered / Unconfirmed
GUEST, unregistred user!
显示数据库表里的内容的时候,如何让它以不同的背景颜色显示每行的内容???
 
if ADOQuery.FieldByName('NUM').AsInteger <=0 then
DBG.Canvas.Font.Color :=clred;
DBG.DefaultDrawColumnCell(rect,datacol,column,state);

以上仅是一个将NUM小于0的行以红色显示的例子,放在DBG的DrawColumnCell事件里,
稍改一下可实现你的要求。或用第三方控件。
 
设置DefaultDrawing为False,写DrawColumnCell事件
以下代码设置每隔一行换一种颜色,自己试试就看出来了!

procedure TfrmBaseJXC.dbgItemsDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
const
AlignFlags : array [TAlignment] of Integer =
( DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
DT_RIGHT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX );
var
Value: string;
RecColor:TColor;
R:TRect;
dbg:TDBGrid;
cs:TCanvas;
begin
Value := '';
if Assigned(Column.Field) then
Value := Column.Field.DisplayText;
dbg:=Sender as TDBGrid;
if gdselected in State then
RecColor:=clHighlight
else if dbg.DataSource.DataSet.RecNo mod 2 =0 then
RecColor:=$00C0E0E0
else
RecColor:=$00E8FFFF;

//以上6行代码设置不同的背景颜色,在这里是每隔一行换一种颜色

with Rect do
R:= Classes.Rect(Left+2,Top+ 2, Right-2, Bottom);
dbg.Canvas.Brush.Color:=RecColor;
dbg.Canvas.FillRect(Rect);
DrawText(dbg.Canvas.Handle, PChar(Value), Length(Value), R,
AlignFlags[Column.Alignment]);
cs:=TCanvas.Create;
cs.Handle:=GetDC(dbg.Handle);
try
cs.FrameRect(Rect);
finally
ReleaseDC(dbg.Handle,cs.Handle);
cs.Free;
end;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
730
SUNSTONE的Delphi笔记
S
后退
顶部