unit DBXBGrid;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGridEh, Menus, DBGrids, dbclient, DBGridEhImpExp, Db;
Const ClipSize = 30; //剪贴板大小
type
TClipBuffer = Class(TObject)
public
FieldBuffer: array[0..ClipSize-1, 0..ClipSize-1] of string;
PreRowValue:array[0..ClipSize-1] of string; //增加新行时,使用的复制行
ColCount: integer;
RowCount: integer;
CopyType: integer; //0:gstNon; 1:gstRectangle; 2:gstRecordBooks; 3:gstAll;
constructor Create;
end; TDBXBGrid = class(TCustomDBGridEh)
private
FUseGridStyle: Boolean; //是否使用交替颜色显示改字段的行
FPickOnly: Boolean; FClipBuffer:TClipBuffer;
FGridStyleIndex: integer; procedure SetGridStyle(const Value: integer);
protected
procedure GetCellParams(Column: TColumnEh; AFont: TFont;
var Background: TColor; State: TGridDrawState);
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
public
property GridHeight;
property RowCount;
property Canvas;
property SelectedRows;
constructor Create(AOwner: TComponent);override;
destructor Destroy;override; published
property GridStyleIndex: Integer read FGridStyleIndex write SetGridStyle default 0; //为0时,表示不使用风格
//property CanEdit: Boolean read FCanEdit write FCanEdit default True; //用来指示网格的弹出菜单是否包含编辑菜单项 property Align;
property AllowedOperations;
property AllowedSelections;
property Anchors;
property AutoFitColWidths;
property BiDiMode;
property BorderStyle;
property Color;
property ColumnDefValues;
property Columns stored False; //StoreColumns;
property Constraints;
property Ctl3D;
property DataSource;
property DefaultDrawing;
property DragCursor;
property DragKind;
property DragMode;
property DrawMemoText;
property EditActions;
property Enabled;
property FixedColor;
property Flat;
property Font;
property FooterColor;
property FooterFont;
property FooterRowCount;
property FrozenCols;
property HorzScrollBar;
property ImeMode;
property ImeName;
property MinAutoFitWidth;
property Options;
property OptionsEh;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property RowHeight;
property RowLines;
property RowSizingAllowed;
property ShowHint;
property SumList;
property TabOrder;
property TabStop;
property TitleFont;
property TitleHeight;
property TitleImages;
property TitleLines;
property UseMultiTitle;
property VertScrollBar;
property Visible;
property VTitleMargin;
// property HTitleMargin;
property OnCellClick;
property OnCheckButton;
property OnColEnter;
property OnColExit;
property OnColumnMoved;
property OnColWidthsChanged;
//property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDrawColumnCell;
property OnDrawDataCell; { obsolete }
property OnDrawFooterCell;
property OnEditButtonClick;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetBtnParams;
property OnGetCellParams;
property OnGetFooterParams;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnSortMarkingChanged;
property OnStartDock;
property OnStartDrag;
property OnSumListAfterRecalcAll;
property OnSumListRecalcAll;
property OnTitleBtnClick;
property OnTitleClick;
end;
procedure Register;implementationconstructor TClipBuffer.Create;
var
i, j: integer;
begin
inherited Create;
ColCount := 0;
RowCount := 0;
CopyType := 0;
for j := 0 to ClipSize - 1 do
for i := 0 to ClipSize - 1 do
FieldBuffer[j][i] := '';
for j := 0 to ClipSize - 1 do
PreRowValue[j]:='';
end;constructor TDBXBGrid.Create(AOwner: TComponent);
var
i: integer;
begin
inherited Create(AOwner);
//初始化DBGrid
Options:=Options+[dgMultiSelect];
OPtionsEh:=OptionsEh+[dghEnterAsTab]; //初始化剪贴板
FClipBuffer:=TClipBuffer.Create;end;destructor TDBXBGrid.Destroy;begin FClipBuffer.Free;
inherited Destroy;
end;
//属性GridStyleIndex的写方法
procedure TDBXBGrid.SetGridStyle(const Value: integer);
var
i: integer;
begin
if FGridStyleIndex <> Value then
begin
FGridStyleIndex := Value;
Case FGridStyleIndex of
1:
begin
FixedColor := $008CB4D2;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$00D2FAFA;
self.Columns[i].Font.Color:=clBlack;
Self.TitleFont.Color:=clBlack;
end;
end;
2:
begin
FixedColor := $008C3C4A;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$00FFE7E7;
self.Columns[i].Font.Color:=$8C3C4A;
Self.TitleFont.Color:=clWhite;
end;
end;
3:
begin
FixedColor := $6B696B;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$DEF7F7;
self.Columns[i].Font.Color:=clBlack;
Self.TitleFont.Color:=clWhite;
end;
end;
end;
self.Invalidate;
end;
end;//重载GetCellParams事件,按指定的网格风格给数据行绘制交替颜色
//要使用此功能,首先要设置网格的GridStyleIndex, 然后设置网格列的UseAlterColor属性
procedure TDBXBGrid.GetCellParams(Column: TColumnEh; AFont: TFont;
var Background: TColor; State: TGridDrawState);
begin
if Column.UseGridStyle then
Case FGridStyleIndex of
1:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := $00AAE8EE //第二种颜色
else Background := $00D2FAFA; //第一种颜色
end;
end;
2:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := $00F7F7F7 //第二种颜色
else Background := $00FFE7E7; //第一种颜色
end;
end;
3:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := clWhite //第二种颜色
else Background := $DEF7F7; //第一种颜色
end;
end;
end;
inherited GetCellParams(Column, AFont, Background, State);
end;procedure TDBXBGrid.KeyPress(var Key: Char);
begin
inherited;
if Columns[SelectedIndex].PickOnly then Key:=#0;
end;//****************************************************************//
procedure Register;
begin
RegisterComponents('Data Controls', [TDBXBGrid]);
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGridEh, Menus, DBGrids, dbclient, DBGridEhImpExp, Db;
Const ClipSize = 30; //剪贴板大小
type
TClipBuffer = Class(TObject)
public
FieldBuffer: array[0..ClipSize-1, 0..ClipSize-1] of string;
PreRowValue:array[0..ClipSize-1] of string; //增加新行时,使用的复制行
ColCount: integer;
RowCount: integer;
CopyType: integer; //0:gstNon; 1:gstRectangle; 2:gstRecordBooks; 3:gstAll;
constructor Create;
end; TDBXBGrid = class(TCustomDBGridEh)
private
FUseGridStyle: Boolean; //是否使用交替颜色显示改字段的行
FPickOnly: Boolean; FClipBuffer:TClipBuffer;
FGridStyleIndex: integer; procedure SetGridStyle(const Value: integer);
protected
procedure GetCellParams(Column: TColumnEh; AFont: TFont;
var Background: TColor; State: TGridDrawState);
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
public
property GridHeight;
property RowCount;
property Canvas;
property SelectedRows;
constructor Create(AOwner: TComponent);override;
destructor Destroy;override; published
property GridStyleIndex: Integer read FGridStyleIndex write SetGridStyle default 0; //为0时,表示不使用风格
//property CanEdit: Boolean read FCanEdit write FCanEdit default True; //用来指示网格的弹出菜单是否包含编辑菜单项 property Align;
property AllowedOperations;
property AllowedSelections;
property Anchors;
property AutoFitColWidths;
property BiDiMode;
property BorderStyle;
property Color;
property ColumnDefValues;
property Columns stored False; //StoreColumns;
property Constraints;
property Ctl3D;
property DataSource;
property DefaultDrawing;
property DragCursor;
property DragKind;
property DragMode;
property DrawMemoText;
property EditActions;
property Enabled;
property FixedColor;
property Flat;
property Font;
property FooterColor;
property FooterFont;
property FooterRowCount;
property FrozenCols;
property HorzScrollBar;
property ImeMode;
property ImeName;
property MinAutoFitWidth;
property Options;
property OptionsEh;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property RowHeight;
property RowLines;
property RowSizingAllowed;
property ShowHint;
property SumList;
property TabOrder;
property TabStop;
property TitleFont;
property TitleHeight;
property TitleImages;
property TitleLines;
property UseMultiTitle;
property VertScrollBar;
property Visible;
property VTitleMargin;
// property HTitleMargin;
property OnCellClick;
property OnCheckButton;
property OnColEnter;
property OnColExit;
property OnColumnMoved;
property OnColWidthsChanged;
//property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDrawColumnCell;
property OnDrawDataCell; { obsolete }
property OnDrawFooterCell;
property OnEditButtonClick;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetBtnParams;
property OnGetCellParams;
property OnGetFooterParams;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnSortMarkingChanged;
property OnStartDock;
property OnStartDrag;
property OnSumListAfterRecalcAll;
property OnSumListRecalcAll;
property OnTitleBtnClick;
property OnTitleClick;
end;
procedure Register;implementationconstructor TClipBuffer.Create;
var
i, j: integer;
begin
inherited Create;
ColCount := 0;
RowCount := 0;
CopyType := 0;
for j := 0 to ClipSize - 1 do
for i := 0 to ClipSize - 1 do
FieldBuffer[j][i] := '';
for j := 0 to ClipSize - 1 do
PreRowValue[j]:='';
end;constructor TDBXBGrid.Create(AOwner: TComponent);
var
i: integer;
begin
inherited Create(AOwner);
//初始化DBGrid
Options:=Options+[dgMultiSelect];
OPtionsEh:=OptionsEh+[dghEnterAsTab]; //初始化剪贴板
FClipBuffer:=TClipBuffer.Create;end;destructor TDBXBGrid.Destroy;begin FClipBuffer.Free;
inherited Destroy;
end;
//属性GridStyleIndex的写方法
procedure TDBXBGrid.SetGridStyle(const Value: integer);
var
i: integer;
begin
if FGridStyleIndex <> Value then
begin
FGridStyleIndex := Value;
Case FGridStyleIndex of
1:
begin
FixedColor := $008CB4D2;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$00D2FAFA;
self.Columns[i].Font.Color:=clBlack;
Self.TitleFont.Color:=clBlack;
end;
end;
2:
begin
FixedColor := $008C3C4A;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$00FFE7E7;
self.Columns[i].Font.Color:=$8C3C4A;
Self.TitleFont.Color:=clWhite;
end;
end;
3:
begin
FixedColor := $6B696B;
for i:=0 to self.Columns.Count-1 do
begin
self.Columns[i].Color:=$DEF7F7;
self.Columns[i].Font.Color:=clBlack;
Self.TitleFont.Color:=clWhite;
end;
end;
end;
self.Invalidate;
end;
end;//重载GetCellParams事件,按指定的网格风格给数据行绘制交替颜色
//要使用此功能,首先要设置网格的GridStyleIndex, 然后设置网格列的UseAlterColor属性
procedure TDBXBGrid.GetCellParams(Column: TColumnEh; AFont: TFont;
var Background: TColor; State: TGridDrawState);
begin
if Column.UseGridStyle then
Case FGridStyleIndex of
1:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := $00AAE8EE //第二种颜色
else Background := $00D2FAFA; //第一种颜色
end;
end;
2:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := $00F7F7F7 //第二种颜色
else Background := $00FFE7E7; //第一种颜色
end;
end;
3:
begin
if not (gdSelected in State) then
begin
if SumList.RecNo mod 2 = 0 then
Background := clWhite //第二种颜色
else Background := $DEF7F7; //第一种颜色
end;
end;
end;
inherited GetCellParams(Column, AFont, Background, State);
end;procedure TDBXBGrid.KeyPress(var Key: Char);
begin
inherited;
if Columns[SelectedIndex].PickOnly then Key:=#0;
end;//****************************************************************//
procedure Register;
begin
RegisterComponents('Data Controls', [TDBXBGrid]);
end;end.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货