{*-----------------------------------------------------------------------------
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, 2 + Rect.Left, 2 + Rect.Top, Panel.Text);
end;
2: // Third panel
begin
Brush.Color := Color;
Font.Color := clBlack;
// Font.Style := [fsItalic];
Panel.Text := ftime;
TextRect(Rect, 2 + Rect.Left, 2 + Rect.Top, Panel.Text);
TextOut(0, 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.
您可以看到行是非白色的。网格其余部分的背景为白色。如何用颜色填充白色区域?
答案 0 :(得分:3)
要更改未被单元格占用的区域的背景颜色,必须设置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, 0, 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.Horz.GridExtent, LDrawInfo.Vert.GridExtent));
end;
end;