delphi – DBGrid XE3背景色
发布时间:2020-12-15 09:15:13 所属栏目:大数据 来源:网络整理
导读:{*----------------------------------------------------------------------------- Unit Name: TopFormU @Author Mr. Arch Brooks,Software Engineer,Brooks Computing Systems LLC @Version 1.0 Date: 04-Jan-2014 Purpose: History: -------------------
{*----------------------------------------------------------------------------- Unit Name: TopFormU @Author Mr. Arch Brooks,Software Engineer,Brooks Computing Systems LLC @Version 1.0 Date: 04-Jan-2014 Purpose: History: -----------------------------------------------------------------------------} unit TopFormU; interface uses BCSXE3Utilsdp,System.Classes,System.SysUtils,System.Variants,TopFormdmU,Vcl.ComCtrls,Vcl.Controls,Vcl.DBCtrls,Vcl.Dialogs,Vcl.ExtCtrls,Vcl.Forms,Vcl.Graphics,Vcl.Grids,Vcl.Menus,Vcl.StdCtrls,Vcl.TabNotBk,Winapi.Messages,Winapi.Windows,Vcl.DBGrids; type /// Tab Sheet Class TTabSheet = class(Vcl.ComCtrls.TTabSheet) private /// Tab Control Color FColor: TColor; procedure SetColor(Value: TColor); procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND; public constructor Create(aOwner: TComponent); override; property Color: TColor read FColor write SetColor; end; /// TopForm Primary Class TTopFormC = class(TForm) /// BCS XE3 Utilities Component BCSXE3UtilsCmp1: TBCSXE3UtilsCmp; /// TopForm Color Dialog TopFormColor: TColorDialog; /// TopForm Colors Menu Item TopFormColors1: TMenuItem; /// TopForm DB Navigator TopFormDBNavigator1: TDBNavigator; /// TopForm DB Memo TopFormDBMemo1: TDBMemo; /// TopForm SB Grid TopFormDBGrid1: TDBGrid; /// BCSPageColor Main Menu TopFormMainMenu1: TMainMenu; /// Main Page Control TopFormPageControl1: TPageControl; /// Help Menu Item TopFormHelp1: TMenuItem; /// Status Panel For Dialog TopFormStatusPanel1: TStatusBar; /// Tab sheet 1 for page control TopFormTabSheet1: TTabSheet; /// Tab sheet 2 for page control TopFormTabSheet2: TTabSheet; /// Timer for Dialog TopFormTimer1: TTimer; procedure TopFormColors1Click(Sender: TObject); procedure TopFormCreate(Sender: TObject); procedure TopFormDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); procedure TopFormFormActivate(Sender: TObject); procedure TopFormGridColor; procedure TopFormHelp1Click(Sender: TObject); procedure TopFormStatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); procedure TopFormTimer1Timer(Sender: TObject); public {Public declarations} end; var /// TopForm Dialog Pointer TopFormC: TTopFormC; implementation {$R *.dfm} var /// TimeStamp Variable ftime: String; /// Item Index i: Integer; {*----------------------------------------------------------------------------- Procedure: Create Date: 04-Jan-2014 @Param aOwner: TComponent @Return None -----------------------------------------------------------------------------} constructor TTabSheet.Create(aOwner: TComponent); begin inherited; FColor := clWhite; end; {*----------------------------------------------------------------------------- Procedure: SetColor Date: 04-Jan-2014 @Param Value: TColor @Return None -----------------------------------------------------------------------------} procedure TTabSheet.SetColor(Value: TColor); begin if FColor <> Value then begin FColor := Value; Invalidate; end; end; {*----------------------------------------------------------------------------- Procedure: WMEraseBkGnd Date: 04-Jan-2014 @Param var Msg: TWMEraseBkGnd @Return None -----------------------------------------------------------------------------} procedure TTabSheet.WMEraseBkGnd(var Msg: TWMEraseBkGnd); begin if FColor = clBtnFace then inherited else begin Brush.Color := FColor; FillRect(Msg.dc,ClientRect,Brush.Handle); Msg.Result := 1; end; end; {*----------------------------------------------------------------------------- Procedure: TopFormColors1Click Date: 04-Jan-2014 @Param Sender: TObject @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormColors1Click(Sender: TObject); var ti: Integer; begin if TopFormColor.Execute then begin Color := TopFormColor.Color; TopFormTabSheet1.Color := Color; TopFormTabSheet2.Color := Color; TopFormDBGrid1.Color := Color; TopFormStatusPanel1.Color := Color; TopFormGridColor; TopFormDBGrid1.Repaint; end; end; {*----------------------------------------------------------------------------- Procedure: TopFormCreate Date: 04-Jan-2014 @Param Sender: TObject @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormCreate(Sender: TObject); begin Color := $C9FCFA; TopFormTabSheet1.Color := Color; TopFormTabSheet2.Color := Color; TopFormStatusPanel1.Color := Color; end; {*----------------------------------------------------------------------------- Procedure: TopFormDrawTab Date: 04-Jan-2014 @Param Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var AText: string; APoint: TPoint; begin with (Control as TPageControl).Canvas do begin Brush.Color := Color; FillRect(Rect); AText := TPageControl(Control).Pages[TabIndex].Caption; with Control.Canvas do begin APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2; APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2; TextRect(Rect,Rect.Left + APoint.x,Rect.Top + APoint.y,AText); end; end; end; {*----------------------------------------------------------------------------- Procedure: FormActivate Date: 05-Jan-2014 @Param Sender: TObject @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormFormActivate(Sender: TObject); begin TopFormDBGrid1.Invalidate; TopFormDBGrid1.Color := Color; TopFormDBGrid1.Canvas.Brush.Color := Color; TopFormDBGrid1.Canvas.Refresh; TopFormGridColor; end; {*----------------------------------------------------------------------------- Procedure: TopFormGridColor Date: 05-Jan-2014 @Param None @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormGridColor; begin i := 0; repeat TopFormDBGrid1.Columns[i].Color := Color; Inc(i); until i > TopFormDBGrid1.Columns.Count - 1; TopFormDBGrid1.Repaint; end; {*----------------------------------------------------------------------------- Procedure: TopFormHelp1Click Date: 04-Jan-2014 @Param Sender: TObject @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormHelp1Click(Sender: TObject); begin BCSXE3UtilsCmp1.ShellExec('http://bcswebs.us/bcs002/'); end; {*----------------------------------------------------------------------------- Procedure: TopFormStatusBar1DrawPanel Date: 04-Jan-2014 @Param StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormStatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin with StatusBar.Canvas do begin FillRect(Rect); case Panel.Index of 0: // fist panel begin Brush.Color := Color; Font.Color := clBlack; // Font.Style := [fsBold]; TextRect(Rect,2 + Rect.Left,2 + Rect.Top,Panel.Text); end; 1: // second panel begin Brush.Color := Color; Font.Color := clBlack; // Font.Style := [fsItalic]; TextRect(Rect,Panel.Text); end; 2: // Third panel begin Brush.Color := Color; Font.Color := clBlack; // Font.Style := [fsItalic]; Panel.Text := ftime; TextRect(Rect,Panel.Text); TextOut(0,ftime); end; end; end; end; {*----------------------------------------------------------------------------- Procedure: TopFormTimer1Timer Date: 04-Jan-2014 @Param Sender: TObject @Return None -----------------------------------------------------------------------------} procedure TTopFormC.TopFormTimer1Timer(Sender: TObject); begin DateTimeToString(ftime,'dddd,mmmm dd,yyyy hh:mm:ss ',now); TopFormStatusPanel1.Panels[2].Text := ftime; end; end. 您可以看到行是非白色的.网格其余部分的背景为白色.如何用颜色填充白色区域? 解决方法
若要更改未被单元格占用的区域的背景颜色,必须设置Color属性,但这仅在DrawingStyle属性具有gdsClassic值时才有效.因此,为了保留主题dbgrid并更改背景颜色,必须覆盖Paint方法.
试试这个使用内插器类的示例 type TDBGrid = class(Vcl.DBGrids.TDBGrid) protected procedure Paint; override; end; TForm1 = class(TForm) DbGrid1: TDbGrid; .... .... { TDBGrid } procedure TDBGrid.Paint; var LDrawInfo: TGridDrawInfo; begin inherited Paint; CalcDrawInfo(LDrawInfo); if LDrawInfo.Horz.GridBoundary < LDrawInfo.Horz.GridExtent then begin Canvas.Brush.Color := Color; //use the Color property to paint the background Canvas.FillRect(Rect(LDrawInfo.Horz.GridBoundary,LDrawInfo.Horz.GridExtent,LDrawInfo.Vert.GridBoundary)); end; if LDrawInfo.Vert.GridBoundary < LDrawInfo.Vert.GridExtent then begin Canvas.Brush.Color := Color;//use the Color property to paint the background Canvas.FillRect(Rect(0,LDrawInfo.Vert.GridBoundary,LDrawInfo.Vert.GridExtent)); end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |