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

📄 customdrawdemomain.pas

📁 delphi的的三方控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit CustomDrawDemoMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  cxStyles, cxMaskEdit, cxCurrencyEdit, cxMemo, cxCheckBox, Menus,
  cxLookAndFeels, ActnList, ImgList, cxInplaceContainer, cxControls,
  ComCtrls, StdCtrls, DemoBasicMain, cxDBLookupComboBox, cxEdit,
  cxEditRepositoryItems, cxGraphics, cxContainer, cxTextEdit, cxCustomData,
  cxClasses, cxVGrid, cxDBVGrid, cxVGridViewInfo, dxOffice11, cxVGridUtils,
  CustomDrawDemoUtils, cxImageComboBox, cxHyperLinkEdit, cxBlobEdit;

type
  TcxItemCustomDrawInfo = class;

  TcxCustomDrawInfo = class (TObject)
  private
    FBitmaps: TList;
    FDefaultFont: TFont;
    FCustomDrawData: TList;
    FOwnerDrawText: Boolean;
    FControl: TControl;
    function GetBkBitmap(ABkImage: TBkImage): TBitmap;
    function GetCount: Integer;
    function GetItem(ADrawArea: TCustomDrawArea): TcxItemCustomDrawInfo;
  public
    constructor Create(AControl: TControl);
    destructor Destroy; override;
    procedure AddNewItem(ADrawArea: TCustomDrawArea; AItemType: TcxItemCustomDrawType);
    function GetItemByIndex(AIndex: Integer): TcxItemCustomDrawInfo;
    property Bitmaps[ABkImage: TBkImage]: TBitmap read GetBkBitmap;
    property Count: Integer read GetCount;
    property DefaultFont: TFont read FDefaultFont;
    property Items[ADrawArea: TCustomDrawArea]: TcxItemCustomDrawInfo read GetItem; default;
    property OwnerDrawText: Boolean read FOwnerDrawText write FOwnerDrawText;
    property Control: TControl read FControl;
  end;

  TFontChangedEvent = procedure (Sender: TObject; AFontSize: Integer) of object;
  TcxItemCustomDrawInfo = class
  private
    FOwner: TcxCustomDrawInfo;
    FBitmap: TBitmap;
    FBkImageType: TBkImage;
    FDrawArea: TCustomDrawArea;
    FDrawingStyle: TCustomDrawingStyle;
    FColorScheme: TColorScheme;
    FFont: TFont;
    FIsBitmapAssigned: Boolean;
    FIsFontAssigned: Boolean;
    FItemType: TcxItemCustomDrawType;
    FOwnerTextDraw: Boolean;
    FFontChangedEvent: TFontChangedEvent;
    function GetBitmap: TBitmap;
    function GetFont: TFont;
    procedure SetBitmap(const Value: TBitmap);
    procedure SetFont(const Value: TFont);
  protected
    procedure DoFontChanged(AFont: TFont); virtual;
  public
    constructor Create(AOwner: TcxCustomDrawInfo; ADrawArea: TCustomDrawArea;
      AItemType: TcxItemCustomDrawType);
    destructor Destroy; override;
    property Owner: TcxCustomDrawInfo read FOwner;
    property Bitmap: TBitmap read GetBitmap write SetBitmap;
    property BkImageType: TBkImage read FBkImageType write FBkImageType;
    property DrawArea: TCustomDrawArea read FDrawArea;
    property DrawingStyle: TCustomDrawingStyle read FDrawingStyle write FDrawingStyle;
    property ColorScheme: TColorScheme read FColorScheme write FColorScheme;
    property Font: TFont read GetFont write SetFont;
    property ItemType: TcxItemCustomDrawType read FItemType;
    property OwnerTextDraw: Boolean read FOwnerTextDraw write FOwnerTextDraw;
    property FontChanged: TFontChangedEvent read FFontChangedEvent write FFontChangedEvent;
  end;

  TCustomDrawDemoMainForm = class(TDemoBasicMainForm)
    cxEditRepository1: TcxEditRepository;
    eriTelephoneMaskEdit: TcxEditRepositoryMaskItem;
    actShowCustomizationForm: TAction;
    actShowCustomizationForm1: TMenuItem;
    miLayoutStyle: TMenuItem;
    miBandsView: TMenuItem;
    miMultiRecordView: TMenuItem;
    miSingleRecordView: TMenuItem;
    N1: TMenuItem;
    cxDBVerticalGrid: TcxDBVerticalGrid;
    cxDBVerticalGridOrderInfo: TcxCategoryRow;
    cxDBVerticalGridPurchaseDate: TcxDBEditorRow;
    cxDBVerticalGridTime: TcxDBEditorRow;
    cxDBVerticalGridPaymentType: TcxDBEditorRow;
    cxDBVerticalGridPaymentAmount: TcxDBEditorRow;
    cxDBVerticalGridQuantity: TcxDBEditorRow;
    cxDBVerticalGridCustomerInfo: TcxCategoryRow;
    cxDBVerticalGridCommonCustomerInfo: TcxCategoryRow;
    cxDBVerticalGridFirstName: TcxDBEditorRow;
    cxDBVerticalGridLastName: TcxDBEditorRow;
    cxDBVerticalGridSpouse: TcxDBEditorRow;
    cxDBVerticalGridPrefix: TcxDBEditorRow;
    cxDBVerticalGridTitle: TcxDBEditorRow;
    cxDBVerticalGridCustomerContacts: TcxCategoryRow;
    cxDBVerticalGridPhonesAndFaxes: TcxCategoryRow;
    cxDBVerticalGridFaxPhone: TcxDBEditorRow;
    cxDBVerticalGridHomePhone: TcxDBEditorRow;
    cxDBVerticalGridCategoryAddress: TcxCategoryRow;
    cxDBVerticalGridState: TcxDBEditorRow;
    cxDBVerticalGridCity: TcxDBEditorRow;
    cxDBVerticalGridAddress: TcxDBEditorRow;
    cxDBVerticalGridZipCode: TcxDBEditorRow;
    cxDBVerticalGridEmail: TcxDBEditorRow;
    cxDBVerticalGridOccupation: TcxDBEditorRow;
    cxDBVerticalGridCustomer: TcxDBEditorRow;
    cxDBVerticalGridCompany: TcxDBEditorRow;
    cxDBVerticalGridCarInfo: TcxCategoryRow;
    cxDBVerticalGridCar: TcxCategoryRow;
    cxDBVerticalGridTrademark: TcxDBEditorRow;
    cxDBVerticalGridModel: TcxDBEditorRow;
    cxDBVerticalGridMPG: TcxCategoryRow;
    cxDBVerticalGridMPG_City: TcxDBEditorRow;
    cxDBVerticalGridMPG_Highway: TcxDBEditorRow;
    cxDBVerticalGridEngine: TcxCategoryRow;
    cxDBVerticalGridHP: TcxDBEditorRow;
    cxDBVerticalGridLiter: TcxDBEditorRow;
    cxDBVerticalGridCyl: TcxDBEditorRow;
    cxDBVerticalGridNotes: TcxCategoryRow;
    cxDBVerticalGridCars_Description: TcxDBEditorRow;
    cxDBVerticalGridTransmission: TcxCategoryRow;
    cxDBVerticalGridTransmissSpeedCount: TcxDBEditorRow;
    cxDBVerticalGridTransmissAutomatic: TcxDBEditorRow;
    cxDBVerticalGridOthers: TcxCategoryRow;
    cxDBVerticalGridCategory: TcxDBEditorRow;
    cxDBVerticalGridHyperlink: TcxDBEditorRow;
    cxDBVerticalGridPrice: TcxDBEditorRow;
    cxDBVerticalGridPicture: TcxDBEditorRow;
    ImageList: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure actCustomizationFormExecute(Sender: TObject);
    procedure cxDBVerticalGridDrawValue(Sender: TObject;
      ACanvas: TcxCanvas; APainter: TcxvgPainter;
      AValueInfo: TcxRowValueInfo; var Done: Boolean);
    procedure cxDBVerticalGridDrawRowHeader(Sender: TObject;
      ACanvas: TcxCanvas; APainter: TcxvgPainter;
      AHeaderViewInfo: TcxCustomRowHeaderInfo; var Done: Boolean);
    procedure cxDBVerticalGridDrawBackground(Sender: TObject;
      ACanvas: TcxCanvas; const R: TRect; const AViewParams: TcxViewParams;
      var Done: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure LayoutStyleClick(Sender: TObject);
  private
    FCustomDrawInfo: TcxCustomDrawInfo;
    function DrawCellItem(AItem: TcxItemCustomDrawInfo; ACanvas: TcxCanvas;
      AValueInfo: TcxRowValueInfo; APainter: TcxvgPainter; Sender: TObject): Boolean;
    function DrawHeaderItem(AItem: TcxItemCustomDrawInfo; ACanvas: TcxCanvas;
      AHeaderViewInfo: TcxCustomRowHeaderInfo; APainter: TcxvgPainter; Sender: TObject): Boolean;
    function DrawItem(AItem: TcxItemCustomDrawInfo; ACanvas: TcxCanvas;
      const R: TRect; AHorizontal: Boolean): Boolean;
    function DrawCategoryItem(AItem: TcxItemCustomDrawInfo; ACanvas: TcxCanvas;
      ACategoryViewInfo: TcxCategoryRowHeaderInfo; APainter: TcxvgPainter; Sender: TObject): Boolean;
    function DrawBackgroundItem(AItem: TcxItemCustomDrawInfo;
  ACanvas: TcxCanvas; const R: TRect; AViewParams: TcxViewParams; Sender: TObject): Boolean;
    procedure DrawIndents(AHeaderViewInfo: TcxCustomRowHeaderInfo; ACustomDrawArea: TCustomDrawArea; ACanvas: TcxCanvas; AViewParams: TcxViewParams;
  APainter: TcxvgPainter; AIndentInfoList: TIndentInfoList);
    procedure DrawCellsLines(ACanvas: TcxCanvas; AColor: TColor;
      ARect: TRect);
    procedure DrawDefaultLines(ACanvas: TcxCanvas; AColor: TColor;
      AHeaderViewInfo: TcxCustomRowHeaderInfo; ARect: TRect; ALineInfos: TLineInfos);
    procedure DrawRightLine(ACanvas: TcxCanvas; AColor: TColor;
      ARect: TRect);
    function GetAdditionalLines(Sender: TcxDBVerticalGrid; AHeaderViewInfo: TcxCustomRowHeaderInfo): TLineInfos;
  public
    property CustomDrawInfo: TcxCustomDrawInfo read FCustomDrawInfo;
  end;

var
  CustomDrawDemoMainForm: TCustomDrawDemoMainForm;

implementation

uses CustomDrawDemoData, ShellAPI, DB, Dialogs, cxListBox, cxGeometry,
  cxLookAndFeelPainters, CustomDrawDemoEditor;

{$R *.dfm}

type
  TControlAccess = class(TControl);

{ TcxCustomDrawInfo }

destructor TcxCustomDrawInfo.Destroy;
var
  I: Integer;
begin
  for I := 0 to FCustomDrawData.Count - 1 do
    TcxItemCustomDrawInfo(FCustomDrawData[I]).Free;
  for I := 0 to FBitmaps.Count - 1 do
    TBitmap(FBitmaps[I]).Free;
  FCustomDrawData.Free;  
  FBitmaps.Free;
  FDefaultFont.Free;
end;

constructor TcxCustomDrawInfo.Create(AControl: TControl);
  procedure LoadResourceBitmaps;
  var
    I: TBkImage;
    ABitmap: TBitmap;
  begin
    for I := Low(BkImageResNames) to High(BkImageResNames) do
    begin
      ABitmap := TBitmap.Create;
      LoadImageFromRes(ABitmap, BkImageResNames[I]);
      FBitmaps.Add(ABitmap);
    end;
  end;
begin
  FControl := AControl;
  FBitmaps := TList.Create;
  LoadResourceBitmaps;
  FDefaultFont := TFont.Create;
  FCustomDrawData := TList.Create;
  FOwnerDrawText := True;
end;

procedure TCustomDrawDemoMainForm.LayoutStyleClick(Sender: TObject);
begin
  if not TMenuItem(Sender).Checked then
  begin
    TMenuItem(Sender).Checked := True;
    cxDBVerticalGrid.LayoutStyle := TcxvgLayoutStyle(TMenuItem(Sender).Tag);
  end;
end;

procedure TcxCustomDrawInfo.AddNewItem(ADrawArea: TCustomDrawArea;
  AItemType: TcxItemCustomDrawType);
begin
  FCustomDrawData.Add(TcxItemCustomDrawInfo.Create(Self, ADrawArea, AItemType));
end;

function TcxCustomDrawInfo.GetItemByIndex(
  AIndex: Integer): TcxItemCustomDrawInfo;
begin
  Result := TcxItemCustomDrawInfo(FCustomDrawData[AIndex]);
end;

function TcxCustomDrawInfo.GetBkBitmap(ABkImage: TBkImage): TBitmap;
begin
  Result := TBitmap(FBitmaps[Integer(ABkImage)]);
end;

function TcxCustomDrawInfo.GetCount: Integer;
begin
  Result := FCustomDrawData.Count;
end;

function TcxCustomDrawInfo.GetItem(ADrawArea: TCustomDrawArea): TcxItemCustomDrawInfo;
var
  I: Integer;
begin
  Result := nil;
  for I := 0 to FCustomDrawData.Count - 1 do
    if TcxItemCustomDrawInfo(FCustomDrawData[I]).DrawArea = ADrawArea then
    begin
      Result := TcxItemCustomDrawInfo(FCustomDrawData[I]);
      Break;
    end;
end;

{ TcxItemCustomDrawInfo }

constructor TcxItemCustomDrawInfo.Create(AOwner: TcxCustomDrawInfo;
  ADrawArea: TCustomDrawArea; AItemType: TcxItemCustomDrawType);
begin
  FOwner := AOwner;
  FDrawArea := ADrawArea;
  FItemType := AItemType;
  if FOwner <> nil then
    FBitmap := AOwner.Bitmaps[TBkImage(0)]
  else
    FBitmap := nil;
  if FOwner <> nil then
    FFont := AOwner.DefaultFont
  else
    FBitmap := nil;
  FBkImageType := TBkImage(0);
  FDrawingStyle := TCustomDrawingStyle(0);
  FColorScheme := TColorScheme(0);
  FIsBitmapAssigned := False;
  FIsFontAssigned := False;
  FOwnerTextDraw := False;
end;

destructor TcxItemCustomDrawInfo.Destroy;
begin
  if FIsBitmapAssigned then
    FBitmap.Free;
  if FIsFontAssigned then
    FFont.Free;
  inherited Destroy;
end;

procedure TcxItemCustomDrawInfo.DoFontChanged(AFont: TFont);
begin
  if Assigned(FFontChangedEvent) then
    FFontChangedEvent(Self, AFont.Size);
end;

function TcxItemCustomDrawInfo.GetBitmap: TBitmap;
begin
  if ((FBkImageType <> bkiUserDefined) or not FIsBitmapAssigned) and
    (FOwner <> nil) then
    Result := FOwner.Bitmaps[FBkImageType]
  else
    Result := FBitmap;
end;

function TcxItemCustomDrawInfo.GetFont: TFont;
begin
  Result := FFont;
end;

procedure TcxItemCustomDrawInfo.SetBitmap(const Value: TBitmap);
begin
  if FIsBitmapAssigned then
    FBitmap.Free;
  FBitmap := Value;
  FIsBitmapAssigned := True;
  FBkImageType := bkiUserDefined;
end;

procedure TcxItemCustomDrawInfo.SetFont(const Value: TFont);
begin
  TControlAccess(Owner.Control).Font := Value;
  if FIsFontAssigned then
    FFont.Free;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -