以下文档将GroupPanel的背景画面和显示的字符串进行修改,并为Band和Header显示特效unit Main;interfaceuses Windows, Forms, dxDBGrid, Controls, Db, DBTables, dxGrClms, Graphics, ExtCtrls, dxTL, dxCntner, ComCtrls, Classes, dxDBCtrl, dxDBTLCl, ImgList;type ...控件部分省略 procedure dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas; ARect: TRect); procedure dxDBGrid1CustomDrawBand(Sender: TObject; ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); procedure dxDBGrid1CustomDrawColumnHeader(Sender: TObject; AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort; var ADone: Boolean); private { Private declarations } public { Public declarations } end;var MainForm: TMainForm;implementationuses SysUtils, dxDemoUtils{$IFDEF VER140}, Variants{$ENDIF}; {$R *.DFM}//这是最重要的一个过程 // Draw GroupPanel, Bands, Headers procedure PaintImageTiled(ACanvas: TCanvas; ARect: TRect; ABitmap: TBitmap); var X, Y: Integer; begin X := ARect.Left; repeat Y := ARect.Top; repeat ACanvas.Draw(X, Y, ABitmap); Inc(Y, ABitmap.Height); until Y >= ARect.Bottom; Inc(X, ABitmap.Width); until X >= ARect.Right end;//以下的内容为GroupPanel显示背景图和显示区域内的文字 procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas; ARect: TRect); var CustomDrawRgn: TdxCustomDrawRegion; begin CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect); try //Image1.Picture.Bitmap 是将要显示的背景图 PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap); if TdxDBGrid(Sender).GroupColumnCount = 0 then with ACanvas do begin Font.Color := clBlack; Brush.Style := bsClear; //在这里显示GroupPanel的字符串 TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, '这里显示字符串'); end; finally CustomDrawRgn.Free; end; end;//以下内容为Band显示背景图 procedure TMainForm.dxDBGrid1CustomDrawBand(Sender: TObject; ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); const BandFontColor : Array[Boolean] of TColor = (clBtnShadow, clWhite); var X, Y: Integer; CustomDrawRgn: TdxCustomDrawRegion; IsBandDown: Boolean; begin CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect); try //Image2.Picture.Bitmap是将要显示的背景图 PaintImageTiled(ACanvas, ARect, Image2.Picture.Bitmap); ACanvas.Font.Size := 11; X := ARect.Left + 5; Y := ARect.Top + (ARect.Bottom - ARect.Top - ACanvas.TextHeight(AText)) div 2; ACanvas.Font.Style := ACanvas.Font.Style + [fsBold]; IsBandDown := (Sender as TdxDBGrid).DownBandIndex = ABand.VisibleIndex; if IsBandDown then ACanvas.Brush.Color := clBtnFace; ACanvas.Brush.Style := bsClear; ACanvas.Font.Color := BandFontColor[IsBandDown]; ACanvas.TextRect(ARect, X + 3, Y + 3, AText); if not IsBandDown then begin ACanvas.Font.Color := clWhite; ACanvas.TextRect(ARect, X, Y, AText ); end; DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPLEFT); DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDOUTER, BF_BOTTOMRIGHT); finally CustomDrawRgn.Free; end; ADone := True; end;//以下内容为Header显示特效,可以更改字体和背景色 procedure TMainForm.dxDBGrid1CustomDrawColumnHeader(Sender: TObject; AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort; var ADone: Boolean); begin // 更改字体:字体显示为灰色并且加粗 if (AColumn.Caption = 'City') or (AColumn.Caption = 'State') or (AColumn.Caption = 'Country') or (AColumn.Caption = 'Zip') then begin AFont.Style := AFont.Style + [fsBold]; AFont.Color := clGray; end; // 更改背景色,把背景色改为绿色 if AColumn.Caption = 'CustNo' then AColor := clGreen; end;function GetColor(BColor, EColor: TColor; N, H: Integer): TColor; begin Result := RGB(Trunc(GetRValue(BColor) + (GetRValue(EColor)-GetRValue(BColor)) * N / H), Trunc(GetGValue(BColor) + (GetGValue(EColor)-GetGValue(BColor)) * N / H), Trunc(GetBValue(BColor) + (GetBValue(EColor)-GetBValue(BColor)) * N / H)); end;end.
//这是他Demo下的,不过是3.22 的. procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas; ARect: TRect); var CustomDrawRgn: TdxCustomDrawRegion; begin CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect); try PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap); if TdxDBGrid(Sender).GroupColumnCount = 0 then with ACanvas do begin Font.Color := clBlack; Brush.Style := bsClear; TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column'); end; finally CustomDrawRgn.Free; end; end;procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas; ARect: TRect); var CustomDrawRgn: TdxCustomDrawRegion; begin CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect); try PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap); if TdxDBGrid(Sender).GroupColumnCount = 0 then with ACanvas do begin Font.Color := clBlack; Brush.Style := bsClear; TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column'); //Here end; finally CustomDrawRgn.Free; end; end;
Windows, Forms, dxDBGrid, Controls, Db, DBTables, dxGrClms, Graphics,
ExtCtrls, dxTL, dxCntner, ComCtrls, Classes, dxDBCtrl, dxDBTLCl, ImgList;type
...控件部分省略
procedure dxDBGrid1BackgroundDrawEvent(Sender: TObject; ACanvas: TCanvas;
ARect: TRect);
procedure dxDBGrid1CustomDrawBand(Sender: TObject; ABand: TdxTreeListBand;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
var ADone: Boolean);
procedure dxDBGrid1CustomDrawColumnHeader(Sender: TObject;
AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort;
var ADone: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;implementationuses SysUtils, dxDemoUtils{$IFDEF VER140}, Variants{$ENDIF};
{$R *.DFM}//这是最重要的一个过程
// Draw GroupPanel, Bands, Headers
procedure PaintImageTiled(ACanvas: TCanvas; ARect: TRect; ABitmap: TBitmap);
var
X, Y: Integer;
begin
X := ARect.Left;
repeat
Y := ARect.Top;
repeat
ACanvas.Draw(X, Y, ABitmap);
Inc(Y, ABitmap.Height);
until Y >= ARect.Bottom;
Inc(X, ABitmap.Width);
until X >= ARect.Right
end;//以下的内容为GroupPanel显示背景图和显示区域内的文字
procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
ACanvas: TCanvas; ARect: TRect);
var
CustomDrawRgn: TdxCustomDrawRegion;
begin
CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
try
//Image1.Picture.Bitmap 是将要显示的背景图
PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
if TdxDBGrid(Sender).GroupColumnCount = 0 then
with ACanvas do
begin
Font.Color := clBlack;
Brush.Style := bsClear;
//在这里显示GroupPanel的字符串
TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, '这里显示字符串');
end;
finally
CustomDrawRgn.Free;
end;
end;//以下内容为Band显示背景图
procedure TMainForm.dxDBGrid1CustomDrawBand(Sender: TObject;
ABand: TdxTreeListBand; ACanvas: TCanvas; ARect: TRect;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
const
BandFontColor : Array[Boolean] of TColor = (clBtnShadow, clWhite);
var
X, Y: Integer;
CustomDrawRgn: TdxCustomDrawRegion;
IsBandDown: Boolean;
begin
CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
try
//Image2.Picture.Bitmap是将要显示的背景图
PaintImageTiled(ACanvas, ARect, Image2.Picture.Bitmap); ACanvas.Font.Size := 11;
X := ARect.Left + 5;
Y := ARect.Top + (ARect.Bottom - ARect.Top - ACanvas.TextHeight(AText)) div 2;
ACanvas.Font.Style := ACanvas.Font.Style + [fsBold]; IsBandDown := (Sender as TdxDBGrid).DownBandIndex = ABand.VisibleIndex;
if IsBandDown then
ACanvas.Brush.Color := clBtnFace;
ACanvas.Brush.Style := bsClear;
ACanvas.Font.Color := BandFontColor[IsBandDown];
ACanvas.TextRect(ARect, X + 3, Y + 3, AText);
if not IsBandDown then
begin
ACanvas.Font.Color := clWhite;
ACanvas.TextRect(ARect, X, Y, AText );
end; DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDINNER, BF_TOPLEFT);
DrawEdge(ACanvas.Handle, ARect, BDR_RAISEDOUTER, BF_BOTTOMRIGHT); finally
CustomDrawRgn.Free;
end; ADone := True;
end;//以下内容为Header显示特效,可以更改字体和背景色
procedure TMainForm.dxDBGrid1CustomDrawColumnHeader(Sender: TObject;
AColumn: TdxTreeListColumn; ACanvas: TCanvas; ARect: TRect;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ASorted: TdxTreeListColumnSort;
var ADone: Boolean);
begin
// 更改字体:字体显示为灰色并且加粗
if (AColumn.Caption = 'City') or (AColumn.Caption = 'State') or
(AColumn.Caption = 'Country') or (AColumn.Caption = 'Zip') then
begin
AFont.Style := AFont.Style + [fsBold];
AFont.Color := clGray;
end; // 更改背景色,把背景色改为绿色
if AColumn.Caption = 'CustNo' then
AColor := clGreen;
end;function GetColor(BColor, EColor: TColor; N, H: Integer): TColor;
begin
Result := RGB(Trunc(GetRValue(BColor) + (GetRValue(EColor)-GetRValue(BColor)) * N / H),
Trunc(GetGValue(BColor) + (GetGValue(EColor)-GetGValue(BColor)) * N / H),
Trunc(GetBValue(BColor) + (GetBValue(EColor)-GetBValue(BColor)) * N / H));
end;end.
procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
ACanvas: TCanvas; ARect: TRect);
var
CustomDrawRgn: TdxCustomDrawRegion;
begin
CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
try
PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
if TdxDBGrid(Sender).GroupColumnCount = 0 then
with ACanvas do
begin
Font.Color := clBlack;
Brush.Style := bsClear;
TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column');
end;
finally
CustomDrawRgn.Free;
end;
end;procedure TMainForm.dxDBGrid1BackgroundDrawEvent(Sender: TObject;
ACanvas: TCanvas; ARect: TRect);
var
CustomDrawRgn: TdxCustomDrawRegion;
begin
CustomDrawRgn := TdxCustomDrawRegion.Create(ACanvas.Handle, ARect);
try
PaintImageTiled(ACanvas, ARect, Image1.Picture.Bitmap);
if TdxDBGrid(Sender).GroupColumnCount = 0 then
with ACanvas do
begin
Font.Color := clBlack;
Brush.Style := bsClear;
TextOut(10,(ARect.Bottom - ARect.Top + ACanvas.Font.Height) div 2, 'Drag a column header here to group that column'); //Here
end;
finally
CustomDrawRgn.Free;
end;
end;