📄 customdrawtableviewdemomain.pas
字号:
unit CustomDrawTableViewDemoMain;
{$I ..\..\cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Jpeg,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, cxControls, cxLookupGrid, cxLookupDBGrid, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGridLevel, cxGridCustomView, cxGrid,
cxMaskEdit, StdCtrls, ExtCtrls, cxContainer, cxEdit, cxTextEdit, cxDropDownEdit,
cxDBEdit, cxStyles, Menus, ActnList, ImgList, ComCtrls, cxLookAndFeels,
cxGraphics, ToolWin, cxGridCustomPopupMenu, cxGridPopupMenu,
DB, cxBlobEdit, cxCustomData, cxFilter, cxData, cxDBData, cxClasses, cxLookAndFeelPainters,
cxDataStorage, cxTimeEdit, cxImageComboBox, DemoUtils;
type
TCustomDrawTableViewDemoMainForm = class(TForm)
mmMain: TMainMenu;
miAbout: TMenuItem;
miFile: TMenuItem;
miOptions: TMenuItem;
miExit: TMenuItem;
sbMain: TStatusBar;
lbDescrip: TLabel;
miSeparator1: TMenuItem;
miLookFeel: TMenuItem;
miKind: TMenuItem;
miFlat: TMenuItem;
miStandard: TMenuItem;
miUltraFlat: TMenuItem;
miNativeStyle: TMenuItem;
OpenDialog: TOpenDialog;
FontDialog: TFontDialog;
cxgCars: TcxGrid;
tvCars: TcxGridDBTableView;
lvCars: TcxGridLevel;
lvOrders: TcxGridLevel;
tvOrders: TcxGridDBTableView;
miCustomDrawStylesEditor: TMenuItem;
tvCarsTrademark: TcxGridDBColumn;
tvCarsModel: TcxGridDBColumn;
tvCarsHP: TcxGridDBColumn;
tvCarsLiter: TcxGridDBColumn;
tvCarsCyl: TcxGridDBColumn;
tvCarsTransmissSpeedCount: TcxGridDBColumn;
tvCarsMPG_City: TcxGridDBColumn;
tvCarsMPG_Highway: TcxGridDBColumn;
tvCarsCategory: TcxGridDBColumn;
tvCarsDescription: TcxGridDBColumn;
tvCarsPicture: TcxGridDBColumn;
tvCarsPrice: TcxGridDBColumn;
tvOrdersPurchaseDate: TcxGridDBColumn;
tvOrdersTime: TcxGridDBColumn;
tvOrdersPaymentType: TcxGridDBColumn;
tvOrdersPaymentAmount: TcxGridDBColumn;
tvOrdersQuantity: TcxGridDBColumn;
imPaymentType: TImageList;
imIndicatorImages: TImageList;
LookAndFeelController: TcxLookAndFeelController;
procedure miAboutClick(Sender: TObject);
procedure miExitClick(Sender: TObject);
procedure miNativeStyleClick(Sender: TObject);
procedure miLookAndFeelKindClick(Sender: TObject);
procedure tvCarsCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tvOrdersCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
procedure miCustomDrawEditorClick(Sender: TObject);
procedure tvCarsCustomDrawColumnHeader(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo;
var ADone: Boolean);
procedure tvCarsCustomDrawFooterCell(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo;
var ADone: Boolean);
procedure tvCarsCustomDrawPartBackground(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo;
var ADone: Boolean);
procedure tvOrdersCustomDrawColumnHeader(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo;
var ADone: Boolean);
procedure tvOrdersCustomDrawFooterCell(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo;
var ADone: Boolean);
procedure tvOrdersCustomDrawPartBackground(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxCustomGridCellViewInfo;
var ADone: Boolean);
procedure tvCarsCustomDrawGroupCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableCellViewInfo;
var ADone: Boolean);
procedure tvOrdersCustomDrawGroupCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableCellViewInfo;
var ADone: Boolean);
procedure tvCarsCustomDrawIndicatorCell(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo;
var ADone: Boolean);
procedure tvOrdersCustomDrawIndicatorCell(Sender: TcxGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo;
var ADone: Boolean);
private
FCustomDrawingStyle: TCustomDrawingStyleArr;
FColorScheme: TColorSchemes;
FSkyBitmap, FEgyptBitmap, FMyFaceBitmap, FTileBitmap: TBitMap;
FGridBrushMasterCell,
FGridBrushMasterGroupCell,
FGridBrushMasterFooterCell,
FGridBrushMasterColumnHeader,
FGridBrushMasterIndicatorCell,
FGridBrushMasterPartBackground,
FGridBrushDetailCell,
FGridBrushDetailGroupCell,
FGridBrushDetailFooterCell,
FGridBrushDetailColumnHeader,
FGridBrushDetailIndicatorCell,
FGridBrushDetailPartBackground: TBrush;
FBitMap: TBitMap;
FFonts: TFonts;
FBkImages: TBkImages;
FIndicatorImageIndex: array [0..1] of Integer;
function GetIndicatorImageIndex(AViewType: TViewType): Integer;
procedure SetIndicatorImageIndex(AViewType: TViewType;
const Value: Integer);
protected
procedure SetCustomDrawingStyle(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; const Value: TCustomDrawingStyle);
function GetCustomDrawingStyle(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TCustomDrawingStyle;
procedure SetCustomDrawingStyles;
function GetCustomBkImage(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TBkImage;
procedure SetCustomBkImage(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; AValue: TBkImage);
function GetCustomColorScheme(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TColorScheme;
procedure SetCustomColorScheme(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; const Value: TColorScheme);
procedure SetUserDefineBitmap(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; const Value: TBitmap);
function GetFont(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TFont;
procedure SetFont(AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; const Value: TFont);
procedure InitFonts;
public
property CustomDrawingStyle[AViewType: TViewType; ACustomDrawArea: TCustomDrawArea]: TCustomDrawingStyle read GetCustomDrawingStyle write SetCustomDrawingStyle;
property CustomBkImage[AViewType: TViewType; ACustomDrawArea: TCustomDrawArea]: TBkImage read GetCustomBkImage write SetCustomBkImage;
property CustomColorScheme[AViewType: TViewType; ACustomDrawArea: TCustomDrawArea]: TColorScheme read GetCustomColorScheme write SetCustomColorScheme;
property UserDefindedBitmap[AViewType: TViewType; ACustomDrawArea: TCustomDrawArea]: TBitmap write SetUserDefineBitmap;
property Fonts[AViewType: TViewType; ACustomDrawArea: TCustomDrawArea]: TFont read GetFont write SetFont;
property IndicatorImageIndex[AViewType: TViewType]:Integer read GetIndicatorImageIndex write SetIndicatorImageIndex;
end;
var
CustomDrawTableViewDemoMainForm: TCustomDrawTableViewDemoMainForm;
implementation
{$R *.dfm}
uses
cxGridCommon, CustomDrawTableViewDemoData, CustomDrawTableViewDemoStylesEditor,
AboutDemoForm;
procedure TCustomDrawTableViewDemoMainForm.InitFonts;
var
I, J: Integer;
begin
for I:=0 to High(FFonts) do
for J:=0 to High(FFonts[I]) do
FFonts[I, J] := TFont.Create;
end;
procedure TCustomDrawTableViewDemoMainForm.FormCreate(Sender: TObject);
begin
InitFonts;
FSkyBitmap := TBitMap.Create;
LoadImageFromRes(FSkyBitmap, 'SKY');
FEgyptBitmap := TBitmap.Create;
LoadImageFromRes(FEgyptBitmap, 'EGYPT');
FMyFaceBitmap := TBitmap.Create;
LoadImageFromRes(FMyFaceBitmap, 'MYFACE');
FTileBitmap := TBitmap.Create;
LoadImageFromRes(FTileBitmap, 'TILE');
FBitMap := TBitMap.Create;
SetCustomDrawingStyles;
end;
procedure TCustomDrawTableViewDemoMainForm.FormDestroy(Sender: TObject);
var
i, J: Integer;
begin
for I:=0 to High(FFonts) do
for J:=0 to High(FFonts[I]) do
FFonts[I, J].Free;
FBitMap.Free;
FEgyptBitmap.Free;
FMyFaceBitmap.Free;
FTileBitmap.Free;
FSkyBitmap.Free;
FGridBrushMasterCell.Free;
FGridBrushMasterGroupCell.Free;
FGridBrushMasterFooterCell.Free;
FGridBrushMasterColumnHeader.Free;
FGridBrushMasterIndicatorCell.Free;
FGridBrushMasterPartBackground.Free;
FGridBrushDetailCell.Free;
FGridBrushDetailGroupCell.Free;
FGridBrushDetailFooterCell.Free;
FGridBrushDetailColumnHeader.Free;
FGridBrushDetailIndicatorCell.Free;
FGridBrushDetailPartBackground.Free;
end;
procedure TCustomDrawTableViewDemoMainForm.miAboutClick(Sender: TObject);
begin
ShowAboutDemoForm;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw, val: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaCell)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaCell)]), 0], 40, AIsVertical)
end;
cdsDependOnData:
begin
ACanvas.Canvas.Brush.Style := bsSolid;
ACanvas.Canvas.Brush.Color := clBlueLight;
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[tvCarsCategory.Index], varString);
if val = 'SPORTS' then
ACanvas.Canvas.Font.Color := clRed
else
if val = 'SALOON' then
ACanvas.Canvas.Font.Color := clBlue
else
if val = 'TRUCK' then
ACanvas.Canvas.Font.Color := clGreen;
ACanvas.Canvas.FillRect(ARec);
end;
end;
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ADone := not (FCustomDrawingStyle[Integer(vtMaster), Integer(cdaCell)] in [cdsDefaultDrawing, cdsDependOnData]);
if ADone then
begin
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
ACanvas.DrawText(ATextToDraw, ARec, 0);
end;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawGroupCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaGroupCell)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaGroupCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterGroupCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)]), 0], 40, AIsVertical)
end;
end;
ADone := not (FCustomDrawingStyle[Integer(vtMaster), Integer(cdaGroupCell)] in [cdsDefaultDrawing]);
if ADone then
begin
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ARec.Left := ARec.Left + (AViewInfo.RecordViewInfo.ExpandButtonBounds.Right - AViewInfo.RecordViewInfo.ExpandButtonBounds.Left) + 10;
ARec.Top := ARec.Top + cxGridCellTextOffset;
ACanvas.DrawText(ATextToDraw, ARec, 0);
end;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawIndicatorCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
ARec: TRect;
AIsVertical: Boolean;
AIndicatorKind: TcxIndicatorKind;
X, Y: Integer;
begin
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaIndicatorCell)]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -