⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customdrawtableviewdemomain.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -