📄 customdrawdemomain.pas
字号:
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 + -