Componentes.Terceros.DevExp.../official/x.26/ExpressQuantumGrid 6/Demos/Delphi/CustomDrawTableViewDemo/CustomDrawTableViewDemoMain.pas
2007-09-09 11:27:27 +00:00

986 lines
36 KiB
ObjectPascal

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)]);
if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
AIndicatorKind := ikNone
else
AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterIndicatorCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
end;
end;
if AIndicatorKind <> ikNone then
begin
with imIndicatorImages, ARec do
begin
X := (Left + Right - Width) div 2;
Y := (Top + Bottom - Height) div 2;
end;
imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtMaster], True);
end;
ADone := not (FCustomDrawingStyle[Integer(vtMaster), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;
procedure TCustomDrawTableViewDemoMainForm.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TCustomDrawTableViewDemoMainForm.miNativeStyleClick(Sender: TObject);
begin
with LookAndFeelController do
begin
NativeStyle := not NativeStyle;
(Sender as TMenuItem).Checked := NativeStyle;
end;
end;
procedure TCustomDrawTableViewDemoMainForm.miLookAndFeelKindClick(Sender: TObject);
begin
LookAndFeelController.Kind := TcxLookAndFeelKind(TMenuItem(Sender).MenuIndex);
(Sender as TMenuItem).Checked := True;
end;
procedure TCustomDrawTableViewDemoMainForm.FormShow(Sender: TObject);
begin
CustomDrawTableViewDemoStylesEditorForm.Show;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
val: String;
begin
ATextToDraw := AViewInfo.GridRecord.DisplayTexts[AViewInfo.Item.Index];
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaCell)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaCell)]), 0], 40, AIsVertical)
end;
cdsDependOnData:
begin
ACanvas.Canvas.Brush.Style := bsSolid;
ACanvas.Canvas.Brush.Color := clBlueLight;
val := VarAsType(AViewInfo.GridRecord.DisplayTexts[tvOrdersPaymentType.Index], varString);
if val = 'Master Card' then
ACanvas.Canvas.Font.Color := clRed
else
if val = 'American Express' then
ACanvas.Canvas.Font.Color := clBlue
else
if val = 'Cash' then
ACanvas.Canvas.Font.Color := clGreen;
if val = 'Visa Card' then
ACanvas.Canvas.Font.Color := clFuchsia;
ACanvas.Canvas.FillRect(ARec);
end;
end;
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaCell)] in [cdsDefaultDrawing, cdsDependOnData]);
if ADone then
begin
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
ACanvas.DrawText(ATextToDraw, ARec, 0);
end;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawGroupCell(
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(vtDetail), Integer(cdaGroupCell)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailGroupCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 0], 40, AIsVertical)
end;
end;
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaGroupCell)] in [cdsDefaultDrawing]);
if ADone then
begin
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.tvOrdersCustomDrawIndicatorCell(
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(vtDetail), Integer(cdaIndicatorCell)]);
if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
AIndicatorKind := ikNone
else
AIndicatorKind := TcxGridIndicatorRowItemViewInfo(AViewInfo).IndicatorKind;
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailIndicatorCell);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGrey) or (FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaGroupCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaIndicatorCell)]), 0], 40, AIsVertical)
end;
end;
if AIndicatorKind <> ikNone then
begin
with imIndicatorImages, ARec do
begin
X := (Left + Right - Width) div 2;
Y := (Top + Bottom - Height) div 2;
end;
imIndicatorImages.Draw(ACanvas.Canvas, X, Y, IndicatorImageIndex[vtDetail], True);
end;
ADone := not (FCustomDrawingStyle[Integer(vtDetail), Integer(cdaIndicatorCell)] in [cdsDefaultDrawing]);
end;
procedure TCustomDrawTableViewDemoMainForm.miCustomDrawEditorClick(
Sender: TObject);
begin
CustomDrawTableViewDemoStylesEditorForm.Show;
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyle(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea;
const Value: TCustomDrawingStyle);
begin
if FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] <> Value then
begin
FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)] := Value;
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end
end;
function TCustomDrawTableViewDemoMainForm.GetCustomDrawingStyle(
AViewType: TViewType;
ACustomDrawArea: TCustomDrawArea): TCustomDrawingStyle;
begin
Result := FCustomDrawingStyle[Integer(AViewType), Integer(ACustomDrawArea)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomDrawingStyles;
var
i, j: Integer;
begin
FGridBrushMasterCell := TBrush.Create;
FGridBrushMasterGroupCell := TBrush.Create;
FGridBrushMasterFooterCell := TBrush.Create;
FGridBrushMasterColumnHeader := TBrush.Create;
FGridBrushMasterIndicatorCell := TBrush.Create;
FGridBrushMasterPartBackground := TBrush.Create;
FGridBrushDetailCell := TBrush.Create;
FGridBrushDetailGroupCell := TBrush.Create;
FGridBrushDetailFooterCell := TBrush.Create;
FGridBrushDetailColumnHeader := TBrush.Create;
FGridBrushDetailIndicatorCell := TBrush.Create;
FGridBrushDetailPartBackground := TBrush.Create;
FIndicatorImageIndex[Integer(vtMaster)] := 0;
FIndicatorImageIndex[Integer(vtDetail)] := 0;
for i:=0 to 1 do
for j:=0 to 5 do
FBkImages[1, j] := bkiTile;
FGridBrushMasterCell.Bitmap := FTileBitmap;
FGridBrushMasterGroupCell.Bitmap := FTileBitmap;
FGridBrushMasterColumnHeader.Bitmap := FTileBitmap;
FGridBrushMasterFooterCell.Bitmap := FTileBitmap;
FGridBrushMasterIndicatorCell.Bitmap := FTileBitmap;
FGridBrushMasterPartBackground.Bitmap := FTileBitmap;
FGridBrushDetailCell.Bitmap := FTileBitmap;
FGridBrushDetailGroupCell.Bitmap := FTileBitmap;
FGridBrushDetailColumnHeader.Bitmap := FTileBitmap;
FGridBrushDetailFooterCell.Bitmap := FTileBitmap;
FGridBrushDetailIndicatorCell.Bitmap := FTileBitmap;
FGridBrushDetailPartBackground.Bitmap := FTileBitmap;
FColorScheme[Integer(vtMaster), 0] := csBlue;
FColorScheme[Integer(vtDetail), 1] := csBlue;
for i:=0 to 1 do
for j:=0 to 5 do
FCustomDrawingStyle[i, j] := cdsGradient;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawColumnHeader(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; 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(cdaColumnHeader)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterColumnHeader);
ACanvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaColumnHeader)]), 0], 40, AIsVertical)
end;
end;
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, ARec, 0);
ADone := FCustomDrawingStyle[Integer(vtMaster), Integer(cdaColumnHeader)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawFooterCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; 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(cdaFooterCell)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaFooterCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterFooterCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGrey) or (FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster),
Integer(cdaFooterCell)]), 1], ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaFooterCell)]), 0], 40, AIsVertical)
end;
end;
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, ARec, 0);
ADone := FCustomDrawingStyle[Integer(vtMaster), Integer(cdaFooterCell)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvCarsCustomDrawPartBackground(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
AIsVertical: Boolean;
begin
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtMaster), Integer(cdaPartBackground)]);
case FCustomDrawingStyle[Integer(vtMaster), Integer(cdaPartBackground)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushMasterPartBackground);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtMaster), Integer(cdaPartBackground)] = csGrey) or
(FColorScheme[Integer(vtMaster), Integer(cdaPartBackground)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaPartBackground)]), 1],
ColorScheme[Integer(FColorScheme[Integer(vtMaster), Integer(cdaPartBackground)]), 0], 40, AIsVertical)
end;
end;
ADone := FCustomDrawingStyle[Integer(vtMaster), Integer(cdaPartBackground)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawColumnHeader(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaColumnHeader)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaColumnHeader)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailColumnHeader);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaColumnHeader)] = csGrey) or
(FColorScheme[Integer(vtDetail), Integer(cdaColumnHeader)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaColumnHeader)]), 1],
ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaColumnHeader)]), 0], 40, AIsVertical);
end;
cdsDependOnData:
begin
ACanvas.Canvas.Brush.Style := bsSolid;
ACanvas.Canvas.Brush.Color := clBlueLight;
ACanvas.Canvas.FillRect(ARec);
end;
end;
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, ARec, 0);
ADone := FCustomDrawingStyle[Integer(vtDetail), Integer(cdaColumnHeader)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawFooterCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
ARec: TRect;
ATextToDraw: String;
AIsVertical: Boolean;
begin
ATextToDraw := AViewInfo.Text;
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaFooterCell)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaFooterCell)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailFooterCell);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaFooterCell)] = csGrey) or
(FColorScheme[Integer(vtDetail), Integer(cdaFooterCell)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaFooterCell)]), 1],
ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaFooterCell)]), 0], 40, AIsVertical)
end;
end;
InflateRect(ARec, -cxGridCellTextOffset, -cxGridCellTextOffset);
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, ARec, 0);
ADone := FCustomDrawingStyle[Integer(vtDetail), Integer(cdaFooterCell)] <> cdsDefaultDrawing;
end;
procedure TCustomDrawTableViewDemoMainForm.tvOrdersCustomDrawPartBackground(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
AIsVertical: Boolean;
begin
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Assign(FFonts[Integer(vtDetail), Integer(cdaPartBackground)]);
case FCustomDrawingStyle[Integer(vtDetail), Integer(cdaPartBackground)] of
cdsBkImage:
begin
ACanvas.Brush.Bitmap := nil;
ACanvas.Brush.Assign(FGridBrushDetailPartBackground);
ACanvas.Canvas.FillRect(ARec);
ACanvas.Brush.Bitmap := nil;
end;
cdsGradient:
begin
AIsVertical := (FColorScheme[Integer(vtDetail), Integer(cdaPartBackground)] = csGrey) or
(FColorScheme[Integer(vtDetail), Integer(cdaPartBackground)] = csGold);
DrawGradient(ACanvas.Canvas, ARec, ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaPartBackground)]),1],
ColorScheme[Integer(FColorScheme[Integer(vtDetail), Integer(cdaPartBackground)]), 0], 40, AIsVertical)
end;
end;
ADone := FCustomDrawingStyle[Integer(vtDetail), Integer(cdaPartBackground)] <> cdsDefaultDrawing;
end;
function TCustomDrawTableViewDemoMainForm.GetCustomBkImage(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TBkImage;
begin
Result := FBkImages[Integer(AViewType), Integer(ACustomDrawArea)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomBkImage(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea; AValue: TBkImage);
function GetImage: TBitMap;
begin
Result := nil;
case AValue of
bkiTile: Result := FTileBitmap;
bkiSky: Result := FSkyBitmap;
bkiEgypt: Result := FEgyptBitmap;
bkiMyFace: Result := FMyFaceBitmap;
end;
end;
begin
if AValue <> bkiUserDefined then
begin
if FBkImages[Integer(AViewType), Integer(ACustomDrawArea)] <> AValue then
begin
FBkImages[Integer(AViewType), Integer(ACustomDrawArea)] := AValue;
case AViewType of
vtMaster:
begin
case ACustomDrawArea of
cdaCell: FGridBrushMasterCell.Bitmap := GetImage;
cdaGroupCell: FGridBrushMasterGroupCell.Bitmap := GetImage;
cdaColumnHeader: FGridBrushMasterColumnHeader.Bitmap := GetImage;
cdaFooterCell: FGridBrushMasterFooterCell.Bitmap := GetImage;
cdaIndicatorCell: FGridBrushMasterIndicatorCell.Bitmap := GetImage;
cdaPartBackGround: FGridBrushMasterPartBackGround.Bitmap := GetImage;
end;
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
case ACustomDrawArea of
cdaCell: FGridBrushDetailCell.Bitmap := GetImage;
cdaGroupCell: FGridBrushDetailGroupCell.Bitmap := GetImage;
cdaColumnHeader: FGridBrushDetailColumnHeader.Bitmap := GetImage;
cdaFooterCell: FGridBrushDetailFooterCell.Bitmap := GetImage;
cdaIndicatorCell: FGridBrushDetailIndicatorCell.Bitmap := GetImage;
cdaPartBackGround: FGridBrushDetailPartBackGround.Bitmap := GetImage;
end;
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end;
end
else
begin
FBkImages[Integer(AViewType), Integer(ACustomDrawArea)] := AValue;
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end;
end;
function TCustomDrawTableViewDemoMainForm.GetCustomColorScheme(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea): TColorScheme;
begin
Result := FColorScheme[Integer(AViewType), Integer(ACustomDrawArea)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetCustomColorScheme(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea;
const Value: TColorScheme);
begin
if FColorScheme[Integer(AViewType), Integer(ACustomDrawArea)] <> Value then
begin
FColorScheme[Integer(AViewType), Integer(ACustomDrawArea)] := Value;
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end;
end;
procedure TCustomDrawTableViewDemoMainForm.SetUserDefineBitmap(
AViewType: TViewType; ACustomDrawArea: TCustomDrawArea;
const Value: TBitmap);
begin
case AViewType of
vtMaster:
begin
case ACustomDrawArea of
cdaCell: FGridBrushMasterCell.Bitmap := Value;
cdaGroupCell: FGridBrushMasterGroupCell.Bitmap := Value;
cdaColumnHeader: FGridBrushMasterColumnHeader.Bitmap := Value;
cdaFooterCell: FGridBrushMasterFooterCell.Bitmap := Value;
cdaIndicatorCell: FGridBrushMasterIndicatorCell.Bitmap := Value;
cdaPartBackGround: FGridBrushMasterPartBackGround.Bitmap := Value;
end;
end;
vtDetail:
begin
case ACustomDrawArea of
cdaCell: FGridBrushDetailCell.Bitmap := Value;
cdaGroupCell: FGridBrushDetailGroupCell.Bitmap := Value;
cdaColumnHeader: FGridBrushDetailColumnHeader.Bitmap := Value;
cdaFooterCell: FGridBrushDetailFooterCell.Bitmap := Value;
cdaIndicatorCell: FGridBrushDetailIndicatorCell.Bitmap := Value;
cdaPartBackGround: FGridBrushDetailPartBackGround.Bitmap := Value;
end;
end;
end;
end;
function TCustomDrawTableViewDemoMainForm.GetFont(AViewType: TViewType;
ACustomDrawArea: TCustomDrawArea): TFont;
begin
Result := FFonts[Integer(AViewType), Integer(ACustomDrawArea)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetFont(AViewType: TViewType;
ACustomDrawArea: TCustomDrawArea; const Value: TFont);
begin
FFonts[Integer(AViewType), Integer(ACustomDrawArea)].Assign(Value);
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end;
function TCustomDrawTableViewDemoMainForm.GetIndicatorImageIndex(
AViewType: TViewType): Integer;
begin
Result := FIndicatorImageIndex[Integer(AViewType)];
end;
procedure TCustomDrawTableViewDemoMainForm.SetIndicatorImageIndex(
AViewType: TViewType; const Value: Integer);
begin
if FIndicatorImageIndex[Integer(AViewType)] <> Value then
begin
FIndicatorImageIndex[Integer(AViewType)] := Value;
case AViewType of
vtMaster:
begin
tvCars.LayoutChanged(False);
tvCars.Painter.Invalidate;
end;
vtDetail:
begin
tvOrders.LayoutChanged(False);
tvOrders.Painter.Invalidate;
end;
end;
end
end;
end.