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

📄 gmlabelprinter.pas

📁 GmPrintSuite 2.96.7] a
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{******************************************************************************}
{                                                                              }
{                             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 + -