📄 gmlabelprinter.pas
字号:
{******************************************************************************}
{ }
{ GmLabelPrinter.pas }
{ }
{ Copyright (c) 2003 Graham Murt - www.MurtSoft.co.uk }
{ }
{ Feel free to e-mail me with any comments, suggestions, bugs or help at: }
{ }
{ graham@murtsoft.co.uk }
{ }
{******************************************************************************}
unit GmLabelPrinter;
interface
uses Windows, Classes, Graphics, GmPreview, SysUtils, Forms, GmTypes,
GmCanvas, GmClasses, GmResource;
type
{$I GMPS.INC}
// events...
TGmDrawLabelEvent = procedure(Sender: TObject; LabelNum: integer; ARect: TGmValueRect; ACanvas: TGmCanvas) of object;
TGmGetLabelHeightEvent = procedure(Sender: TObject; LabelNum, Col, Row: integer; var Height, VertSpacing: TGmValue) of object;
// *** Custom Types ***
TGmLabelShape = (gmLabelRect, gmLabelRoundRect, gmLabelEllipse);
TGmLabelDrawOrder = (gmRows, gmColumns);
TGmLabelTemplate = (Custom_Template,
L7159_Address,
L7160_Address,
L7161_Address,
L7162_Address,
L7163_Address,
L7164_Address,
L7165_Parcel,
L7166_Parcel,
L7167_Shipping,
L7168_Shipping,
L7169_Parcel,
L7170_Eurofolio,
L7171_LeverArch,
L7172_RingBinder,
L7173_Shipping,
L7263_Address,
J8660_Diskette,
Avery_5160_Address,
Avery_8160_Address,
Herma_4209);
// *** TGmLabelTemplateInfo ***
TGmLabelTemplateInfo = class(TPersistent)
private
FTemplateID: TGmLabelTemplate;
FTemplateName: string;
FNumHorz: integer;
FNumVert: integer;
FLabelHeightInch: Extended;
FLabelWidthInch: Extended;
FLabelSpacingHorzInch: Extended;
FLabelSpacingVertInch: Extended;
FLabelShape: TGmLabelShape;
FCornerRadiusInch: Extended;
FOffsetXInch: Extended;
FOffsetYInch: Extended;
FPageExtent: TGmSize;
FPaperSize: TGmPaperSize;
FOrientation: TGmOrientation;
function GetCornerRadius(Measurement: TGmMeasurement): Extended;
function GetLabelHeight(Measurement: TGmMeasurement): Extended;
function GetLabelSpacingHorz(Measurement: TGmMeasurement): Extended;
function GetLabelWidth(Measurement: TGmMeasurement): Extended;
function GetOffsetX(Measurement: TGmMeasurement): Extended;
function GetOffsetY(Measurement: TGmMeasurement): Extended;
function GetPageExtent(Measurement: TGmMeasurement): TGmSize;
function GetSpacingVert(Measurement: TGmMeasurement): Extended;
procedure SetCornerRadius(Measurement: TGmMeasurement; Value: Extended);
procedure SetLabelHeight(Measurement: TGmMeasurement; Value: Extended);
procedure SetLabelWidth(Measurement: TGmMeasurement; Value: Extended);
procedure SetLabelSpacingHorz(Measurement: TGmMeasurement; Value: Extended);
procedure SetLabelSpacingVert(Measurement: TGmMeasurement; Value: Extended);
procedure SetNumLabelsHorz(Value: integer);
procedure SetNumLabelsVert(Value: integer);
procedure SetOffsetX(Measurement: TGmMeasurement; Value: Extended);
procedure SetOffsetY(Measurement: TGmMeasurement; Value: Extended);
procedure SetPageExtent(Measurement: TGmMeasurement; Value: TGmSize);
procedure SetPaperSize(Value: TGmPaperSize);
procedure SetTemplateName(Value: string);
public
constructor Create;
property CornerRadius[Measurement: TGmMeasurement]: Extended read GetCornerRadius write SetCornerRadius;
property TemplateID: TGmLabelTemplate read FTemplateID;
property TemplateName: string read FTemplateName write SetTemplateName;
property NumLabelsHorz: integer read FNumHorz write SetNumLabelsHorz;
property NumLabelsVert: integer read FNumVert write SetNumLabelsVert;
property LabelHeight[Measurement: TGmMeasurement]: Extended read GetLabelHeight write SetLabelHeight;
property LabelWidth[Measurement: TGmMeasurement]: Extended read GetLabelWidth write SetLabelWidth;
property LabelSpacingHorz[Measurement: TGmMeasurement]: Extended read GetLabelSpacingHorz write SetLabelSpacingHorz;
property LabelSpacingVert[Measurement: TGmMeasurement]: Extended read GetSpacingVert write SetLabelSpacingVert;
property LabelShape: TGmLabelShape read FLabelShape write FLabelShape;
property OffsetX[Measurement: TGmMeasurement]: Extended read GetOffsetX write SetOffsetX;
property OffsetY[Measurement: TGmMeasurement]: Extended read GetOffsetY write SetOffsetY;
property PageExtent[Measurement: TGmMeasurement]: TGmSize read GetPageExtent write SetPageExtent;
property PaperSize: TGmPaperSize read FPaperSize write SetPaperSize;
property Orientation: TGmOrientation read FOrientation write FOrientation;
end;
//----------------------------------------------------------------------------
// *** TGmLabelTemplateList ***
TGmLabelTemplateList = class(TGmObjectList)
private
FDestroying: Boolean;
function GetTemplate(index: integer): TGmLabelTemplateInfo;
function GetTemplateFromName(ATemplateName: string): TGmLabelTemplateInfo;
function GetTemplateIndex(ATemplate: TGmLabelTemplateInfo): integer;
function AddTemplate(ATemplate: TGmLabelTemplate;
AName: string;
NumHorz,
NumVert: integer;
LabelWidth,
LabelHeight,
CornerRadius,
SpacingHorz,
SpacingVert,
OffsetX,
OffsetY: Extended;
PageExtent: PGmSize;
PaperSize: TGmPaperSize;
Orientation: TGmOrientation;
LabelShape: TGmLabelShape;
Measurement: TGmMeasurement): TGmLabelTemplateInfo;
function PreDefinedTemplate(Value: TGmLabelTemplate): TGmLabelTemplateInfo;
procedure AddStandardTemplates;
{ private declarations}
public
constructor Create;
function AddCustomTemplate(AName: string;
NumHorz,
NumVert: integer;
LabelWidth,
LabelHeight,
CornerRadius,
SpacingHorz,
SpacingVert,
OffsetX,
OffsetY: Extended;
PageSize: PGmSize;
PaperSize: TGmPaperSize;
LabelShape: TGmLabelShape;
Measurement: TGmMeasurement): TGmLabelTemplateInfo;
procedure ExportToFile(AFilename: string);
procedure ImportFromFile(AFilename: string);
procedure Templates(AStrings: TStrings);
property IndexOfTemplate[Template: TGmLabelTemplateInfo]: integer read GetTemplateIndex;
property Template[index: integer]: TGmLabelTemplateInfo read GetTemplate; default;
property TemplateFromName[TemplateName: string]: TGmLabelTemplateInfo read GetTemplateFromName;
{ public declarations}
end;
//----------------------------------------------------------------------------
// *** TGmLabelPrinter ***
TGmLabelPrinter = class(TGmCustomLabelPrinter)
private
FBreakAdded: Boolean;
FBrush: TBrush;
FClipLabels: Boolean;
FCurrentXY: TGmPoint;
FDrawing: Boolean;
FLabelDrawOrder: TGmLabelDrawOrder;
FLabelTemplate: TGmLabelTemplate;
FPen: TPen;
FPreview: TGmPreview;
FSelectedTemplate: TGmLabelTemplateInfo;
FStartLabel: integer;
FTemplateList: TGmLabelTemplateList;
// events...
FBeforeDrawLabels: TNotifyEvent;
FOnDrawLabel: TGmDrawLabelEvent;
FOnGetLabelHeight: TGmGetLabelHeightEvent;
function GetLabelsPerPage: integer;
procedure SetBrush(Value: TBrush);
procedure SetPen(Value: TPen);
procedure SetLabelTemplate(Value: TGmLabelTemplate);
procedure SetPreview(Value: TGmPreview);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DrawLabels(NumLabels: integer);
procedure NewPage;
procedure UseTemplate(ATemplate: TGmLabelTemplateInfo);
property TemplateInfo: TGmLabelTemplateInfo read FSelectedTemplate;
property TemplateList: TGmLabelTemplateList read FTemplateList;
published
property ClipLabels: Boolean read FClipLabels write FClipLabels default True;
property DrawOrder: TGmLabelDrawOrder read FLabelDrawOrder write FLabelDrawOrder default gmRows;
property LabelBrush: TBrush read FBrush write SetBrush;
property LabelPen: TPen read FPen write SetPen;
property LabelsPerPage: integer read GetLabelsPerPage;
property Preview: TGmPreview read FPreview write SetPreview;
property StartLabel: integer read FStartLabel write FStartLabel default 1;
property Template: TGmLabelTemplate read FLabelTemplate write SetLabelTemplate default L7159_Address;
// events...
property BeforeDrawLabels: TNotifyEvent read FBeforeDrawLabels write FBeforeDrawLabels;
property OnDrawLabel: TGmDrawLabelEvent read FOnDrawLabel write FOnDrawLabel;
property OnGetLabelHeight: TGmGetLabelHeightEvent read FOnGetLabelHeight write FOnGetLabelHeight;
end;
//----------------------------------------------------------------------------
implementation
uses GmConst, GmErrors, TypInfo, Controls, GmFuncs, GmObjects, IniFiles;
const
DEFAULT_CORNER_INCH = 0.10;
DEFAULT_CORNER_MM = 2.54;
//------------------------------------------------------------------------------
// *** TGmLabelTemplateInfo ***
constructor TGmLabelTemplateInfo.Create;
begin
inherited Create;
end;
function TGmLabelTemplateInfo.GetCornerRadius(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FCornerRadiusInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetLabelHeight(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FLabelHeightInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetLabelWidth(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FLabelWidthInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetLabelSpacingHorz(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FLabelSpacingHorzInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetSpacingVert(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FLabelSpacingVertInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetOffsetX(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FOffsetXInch, gmInches, Measurement);
end;
function TGmLabelTemplateInfo.GetOffsetY(Measurement: TGmMeasurement): Extended;
begin
Result := ConvertValue(FOffsetYInch, gmInches, Measurement);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -