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

📄 bsskinprinter.pas

📁 一套非常好用的delphi控件,方便程序员工作
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{*******************************************************************}
{                                                                   }
{       Almediadev Visual Component Library                         }
{       BusinessSkinForm                                            }
{       Version 4.27                                                }
{                                                                   }
{       Copyright (c) 2000-2006 Almediadev                          }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{       Home:  http://www.almdev.com                                }
{       Support: support@almdev.com                                 }
{                                                                   }
{*******************************************************************}

unit bsSkinPrinter;

interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms,
     BusinessSkinForm, bsSkinData, bsSkinCtrls, bsSkinBoxCtrls, Dialogs,
     StdCtrls, ExtCtrls, bsEffects;

type

  TbsPrintRange = (bsprAllPages, bsprSelection, bsprPageNums);
  TbsPrintDialogOption = (bspoPrintToFile, bspoPageNums, bspoSelection,
    bspoDisablePrintToFile);
  TbsPrintDialogOptions = set of TbsPrintDialogOption;

  TbsSkinPrintDialog = class(TComponent)
  private
    PrinterCombobox: TbsSkinComboBox;
    L1, L2, L3, L4: TbsSkinStdLabel;
    NumCopiesEdit: TbsSkinSpinEdit;
    CollateCheckBox: TbsSkinCheckRadioBox;
    StopCheck: Boolean;
    CollateImage: TImage;
    RBAll, RBPages, RBSelection: TbsSkinCheckRadioBox;
    FromPageEdit, ToPageEdit: TbsSkinSpinEdit;
    PrintToFileCheckBox: TbsSkinCheckRadioBox;
  protected
    Form: TForm;
    FSD: TbsSkinData;
    FCtrlFSD: TbsSkinData;
    FButtonSkinDataName: String;
    FSelectSkinDataName: String;
    FLabelSkinDataName: String;
    FDefaultLabelFont: TFont;
    FDefaultSelectFont: TFont;
    FDefaultButtonFont: TFont;
    FAlphaBlend: Boolean;
    FAlphaBlendValue: Byte;
    FAlphaBlendAnimation: Boolean;
    FUseSkinFont: Boolean;
    FTitle: String;
    //
    FFromPage: Integer;
    FToPage: Integer;
    FCollate: Boolean;
    FOptions: TbsPrintDialogOptions;
    FPrintToFile: Boolean;
    FPrintRange: TbsPrintRange;
    FMinPage: Integer;
    FMaxPage: Integer;
    FCopies: Integer;
    procedure SetNumCopies(Value: Integer);
    //
    procedure SetDefaultLabelFont(Value: TFont);
    procedure SetDefaultButtonFont(Value: TFont);
    procedure SetDefaultSelectFont(Value: TFont);
    function GetTitle: string;
    procedure SetTitle(const Value: string);
    procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
    procedure PrinterComboBoxChange(Sender: TObject);
    procedure PropertiesButtonClick(Sender: TObject);
    procedure NumCopiesEditChange(Sender: TObject);
    procedure CollateCheckBoxClick(Sender: TObject);
    procedure FromPageEditChange(Sender: TObject);
    procedure ToPageEditChange(Sender: TObject);
  public
    function Execute: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Title: string read GetTitle write SetTitle;
    property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
    property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
    property AlphaBlendAnimation: Boolean
      read FAlphaBlendAnimation write FAlphaBlendAnimation;
    property SkinData: TbsSkinData read FSD write FSD;
    property CtrlSkinData: TbsSkinData read FCtrlFSD write FCtrlFSD;
    property ButtonSkinDataName: String read FButtonSkinDataName write FButtonSkinDataName;
    property LabelSkinDataName: String read FLabelSkinDataName write FLabelSkinDataName;
    property ComboboxSkinDataName: String read FSelectSkinDataName write FSelectSkinDataName;
    property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
    property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
    property DefaultComboBoxFont: TFont read FDefaultSelectFont write SetDefaultSelectFont;
    property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
    //
    property Collate: Boolean read FCollate write FCollate default False;
    property Copies: Integer read FCopies write SetNumCopies default 0;
    property FromPage: Integer read FFromPage write FFromPage default 0;
    property MinPage: Integer read FMinPage write FMinPage default 0;
    property MaxPage: Integer read FMaxPage write FMaxPage default 0;
    property Options: TbsPrintDialogOptions read FOptions write FOptions default [];
    property PrintToFile: Boolean read FPrintToFile write FPrintToFile default False;
    property PrintRange: TbsPrintRange read FPrintRange write FPrintRange default bsprAllPages;
    property ToPage: Integer read FToPage write FToPage default 0;
    //
  end;

  TbsPaperInfo = class
  private
    FDMPaper: Integer;
    FName: string;
    FSize: TPoint;
    function GetSize(Index: Integer): Integer;
    procedure SetSize(Index: Integer; Value: Integer);
  public
    procedure Assign(Source: TbsPaperInfo);
    function IsEqual(Source: TbsPaperInfo): Boolean;

    property DMPaper: Integer read FDMPaper;
    property Height: Integer index 1 read GetSize write SetSize;
    property Name: string read FName;
    property Size: TPoint read FSize;
    property Width: Integer index 0 read GetSize write SetSize;
  end;

  TbsSkinPrinterSetupDialog = class(TComponent)
  private
    StopCheck: Boolean;
    PrinterCombobox: TbsSkinComboBox;
    L1, L2, L3, L4: TbsSkinStdLabel;
    RBPortrait, RBLandScape: TbsSkinCheckRadioBox;
    OrientationImage: TImage;
    SizeComboBox, SourceComboBox: TbsSkinComboBox;
    Bins, Papers: TStrings;
    procedure RBPortraitClick(Sender: TObject);
    procedure RBLandScapeClick(Sender: TObject);
    procedure SizeComboBoxChange(Sender: TObject);
    procedure SourceComboBoxChange(Sender: TObject);
    procedure ClearPapersAndBins;
    procedure LoadPapersAndBins;
    procedure LoadCurrentPaperAndBin;
    procedure SaveCurrentPaperAndBin;
  protected
    Form: TForm;
    FSD: TbsSkinData;
    FCtrlFSD: TbsSkinData;
    FButtonSkinDataName: String;
    FSelectSkinDataName: String;
    FLabelSkinDataName: String;
    FDefaultLabelFont: TFont;
    FDefaultSelectFont: TFont;
    FDefaultButtonFont: TFont;
    FAlphaBlend: Boolean;
    FAlphaBlendValue: Byte;
    FAlphaBlendAnimation: Boolean;
    FUseSkinFont: Boolean;
    FTitle: String;
    procedure SetDefaultLabelFont(Value: TFont);
    procedure SetDefaultButtonFont(Value: TFont);
    procedure SetDefaultSelectFont(Value: TFont);
    function GetTitle: string;
    procedure SetTitle(const Value: string);
    procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
    procedure PrinterComboBoxChange(Sender: TObject);
    procedure PropertiesButtonClick(Sender: TObject);
  public
    function Execute: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Title: string read GetTitle write SetTitle;
    property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
    property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
    property AlphaBlendAnimation: Boolean
      read FAlphaBlendAnimation write FAlphaBlendAnimation;
    property SkinData: TbsSkinData read FSD write FSD;
    property CtrlSkinData: TbsSkinData read FCtrlFSD write FCtrlFSD;
    property ButtonSkinDataName: String read FButtonSkinDataName write FButtonSkinDataName;
    property LabelSkinDataName: String read FLabelSkinDataName write FLabelSkinDataName;
    property ComboboxSkinDataName: String read FSelectSkinDataName write FSelectSkinDataName;
    property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
    property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
    property DefaultComboBoxFont: TFont read FDefaultSelectFont write SetDefaultSelectFont;
    property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  end;

  TbsSkinSmallPrintDialog = class(TComponent)
  protected
    Form: TForm;
    FSD: TbsSkinData;
    FCtrlFSD: TbsSkinData;
    FButtonSkinDataName: String;
    FSelectSkinDataName: String;
    FLabelSkinDataName: String;
    FDefaultLabelFont: TFont;
    FDefaultSelectFont: TFont;
    FDefaultButtonFont: TFont;
    FAlphaBlend: Boolean;
    FAlphaBlendValue: Byte;
    FAlphaBlendAnimation: Boolean;
    FUseSkinFont: Boolean;
    FTitle: String;
    PrinterCombobox: TbsSkinComboBox;
    L1, L2, L3, L4: TbsSkinStdLabel;
    procedure SetDefaultLabelFont(Value: TFont);
    procedure SetDefaultButtonFont(Value: TFont);
    procedure SetDefaultSelectFont(Value: TFont);
    function GetTitle: string;
    procedure SetTitle(const Value: string);
    procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
    procedure PropertiesButtonClick(Sender: TObject);
    procedure PrinterComboBoxChange(Sender: TObject);
  public
    function Execute: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Title: string read GetTitle write SetTitle;
    property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
    property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
    property AlphaBlendAnimation: Boolean
      read FAlphaBlendAnimation write FAlphaBlendAnimation;
    property SkinData: TbsSkinData read FSD write FSD;
    property CtrlSkinData: TbsSkinData read FCtrlFSD write FCtrlFSD;
    property ButtonSkinDataName: String read FButtonSkinDataName write FButtonSkinDataName;
    property LabelSkinDataName: String read FLabelSkinDataName write FLabelSkinDataName;
    property ComboboxSkinDataName: String read FSelectSkinDataName write FSelectSkinDataName;
    property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
    property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
    property DefaultComboBoxFont: TFont read FDefaultSelectFont write SetDefaultSelectFont;
    property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  end;

  TbsSkinPagePreview = class;
  TbsPageMeasureUnits = (bspmMillimeters, bspmInches);
  TbsPageSetupDialogOption = (bspsoDisableMargins,
    bspsoDisableOrientation, bspsoDisablePaper, bspsoDisablePrinter);
  TbsPageSetupDialogOptions = set of TbsPageSetupDialogOption;  

  TbsSkinPageSetupDialog = class(TComponent)
  private
    StopCheck: Boolean;
    RBPortrait, RBLandScape: TbsSkinCheckRadioBox;
    SizeComboBox, SourceComboBox: TbsSkinComboBox;
    LeftMEdit, TopMEdit, RightMEdit, BottomMEdit: TbsSkinSpinEdit;
    PagePreview: TbsSkinPagePreview;
    Bins, Papers: TStrings;
    //
    FUnits: TbsPageMeasureUnits;
    FOptions: TbsPageSetupDialogOptions;
    //
    FMinMarginLeft: Integer;
    FMinMarginTop: Integer;
    FMinMarginRight: Integer;
    FMinMarginBottom: Integer;

    FMaxMarginLeft: Integer;
    FMaxMarginTop: Integer;
    FMaxMarginRight: Integer;
    FMaxMarginBottom: Integer;

    FMarginLeft: Integer;
    FMarginTop: Integer;
    FMarginRight: Integer;
    FMarginBottom: Integer;
    FPageWidth, FPageHeight: Integer;
    //
    procedure RBPortraitClick(Sender: TObject);
    procedure RBLandScapeClick(Sender: TObject);
    procedure SizeComboBoxChange(Sender: TObject);
    procedure SourceComboBoxChange(Sender: TObject);

    procedure LeftMEditChange(Sender: TObject);
    procedure TopMEditChange(Sender: TObject);
    procedure RightMEditChange(Sender: TObject);
    procedure BottomMEditChange(Sender: TObject);

    procedure ClearPapersAndBins;
    procedure LoadPapersAndBins;
    procedure LoadCurrentPaperAndBin;
    procedure SaveCurrentPaperAndBin;
  protected
    Form: TForm;
    FSD: TbsSkinData;
    FCtrlFSD: TbsSkinData;
    FButtonSkinDataName: String;
    FSelectSkinDataName: String;
    FLabelSkinDataName: String;
    FDefaultLabelFont: TFont;
    FDefaultSelectFont: TFont;
    FDefaultButtonFont: TFont;
    FAlphaBlend: Boolean;
    FAlphaBlendValue: Byte;
    FAlphaBlendAnimation: Boolean;
    FUseSkinFont: Boolean;
    FTitle: String;
    procedure SetDefaultLabelFont(Value: TFont);
    procedure SetDefaultButtonFont(Value: TFont);
    procedure SetDefaultSelectFont(Value: TFont);
    function GetTitle: string;
    procedure SetTitle(const Value: string);
    procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
    procedure PrinterButtonClick(Sender: TObject);
  public
    function Execute: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    //
    property Options: TbsPageSetupDialogOptions read FOptions write FOptions
      default [];
    property Units: TbsPageMeasureUnits
      read FUnits write FUnits default bspmMillimeters;
    //
    property MinMarginLeft: Integer read FMinMarginLeft write FMinMarginLeft;
    property MinMarginTop: Integer read FMinMarginTop write FMinMarginTop;
    property MinMarginRight: Integer read FMinMarginRight write FMinMarginRight;
    property MinMarginBottom: Integer read FMinMarginBottom write FMinMarginBottom;

    property MaxMarginLeft: Integer read FMaxMarginLeft write FMaxMarginLeft;
    property MaxMarginTop: Integer read FMaxMarginTop write FMaxMarginTop;
    property MaxMarginRight: Integer read FMaxMarginRight write FMaxMarginRight;
    property MaxMarginBottom: Integer read FMaxMarginBottom write FMaxMarginBottom;

    property MarginLeft: Integer read FMarginLeft write FMarginLeft;
    property MarginTop: Integer read FMarginTop write FMarginTop;
    property MarginRight: Integer read FMarginRight write FMarginRight;
    property MarginBottom: Integer read FMarginBottom write FMarginBottom;
    property PageWidth: Integer read FPageWidth write FPageWidth;
    property PageHeight: Integer read FPageHeight write FPageHeight;
    //
    property Title: string read GetTitle write SetTitle;
    property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
    property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
    property AlphaBlendAnimation: Boolean
      read FAlphaBlendAnimation write FAlphaBlendAnimation;
    property SkinData: TbsSkinData read FSD write FSD;
    property CtrlSkinData: TbsSkinData read FCtrlFSD write FCtrlFSD;
    property ButtonSkinDataName: String read FButtonSkinDataName write FButtonSkinDataName;
    property LabelSkinDataName: String read FLabelSkinDataName write FLabelSkinDataName;
    property ComboboxSkinDataName: String read FSelectSkinDataName write FSelectSkinDataName;
    property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
    property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
    property DefaultComboBoxFont: TFont read FDefaultSelectFont write SetDefaultSelectFont;
    property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  end;

  TbsSkinPagePreview = class(TbsSkinPanel)
  protected
    procedure CreateControlDefaultImage(B: TBitMap); override;
    procedure CreateControlSkinImage(B: TBitMap); override;
  public
    PageWidth, PageHeight,
    LeftMargin, TopMargin, RightMargin, BottomMargin: Integer;
    constructor Create(AOwner: TComponent); override;
    procedure DrawPaper(R: TRect; Cnvs: TCanvas); 
  end;

implementation

{$R bsSkinPrinter}

Uses bsUtils, bsConst, Printers, WinSpool, bsMessages;

function GetStatusString(Status: DWORD): string;
begin
  case Status of
    0:
      Result := BS_PRNSTATUS_Ready;
    PRINTER_STATUS_PAUSED:
      Result := BS_PRNSTATUS_Paused;
    PRINTER_STATUS_PENDING_DELETION:
      Result := BS_PRNSTATUS_PendingDeletion;
    PRINTER_STATUS_BUSY:
      Result := BS_PRNSTATUS_Busy;
    PRINTER_STATUS_DOOR_OPEN:
      Result := BS_PRNSTATUS_DoorOpen;
    PRINTER_STATUS_ERROR:
      Result := BS_PRNSTATUS_Error;
    PRINTER_STATUS_INITIALIZING:
      Result := BS_PRNSTATUS_Initializing;
    PRINTER_STATUS_IO_ACTIVE:
      Result := BS_PRNSTATUS_IOActive;
    PRINTER_STATUS_MANUAL_FEED:
      Result := BS_PRNSTATUS_ManualFeed;
    PRINTER_STATUS_NO_TONER:
      Result := BS_PRNSTATUS_NoToner;
    PRINTER_STATUS_NOT_AVAILABLE:
      Result := BS_PRNSTATUS_NotAvailable;
    PRINTER_STATUS_OFFLINE:
      Result := BS_PRNSTATUS_OFFLine;
    PRINTER_STATUS_OUT_OF_MEMORY:
      Result := BS_PRNSTATUS_OutOfMemory;
    PRINTER_STATUS_OUTPUT_BIN_FULL:
      Result := BS_PRNSTATUS_OutBinFull;
    PRINTER_STATUS_PAGE_PUNT:
      Result := BS_PRNSTATUS_PagePunt;
    PRINTER_STATUS_PAPER_JAM:
      Result := BS_PRNSTATUS_PaperJam;
    PRINTER_STATUS_PAPER_OUT:
      Result := BS_PRNSTATUS_PaperOut;
    PRINTER_STATUS_PAPER_PROBLEM:
      Result := BS_PRNSTATUS_PaperProblem;
    PRINTER_STATUS_PRINTING:
      Result := BS_PRNSTATUS_Printing;
    PRINTER_STATUS_PROCESSING:
      Result := BS_PRNSTATUS_Processing;
    PRINTER_STATUS_TONER_LOW:
      Result := BS_PRNSTATUS_TonerLow;
    PRINTER_STATUS_USER_INTERVENTION:
      Result := BS_PRNSTATUS_UserIntervention;
    PRINTER_STATUS_WAITING:
      Result := BS_PRNSTATUS_Waiting;
    PRINTER_STATUS_WARMING_UP:
      Result := BS_PRNSTATUS_WarningUp;
  else
    Result := '';
  end;
end;

procedure CallDocumentPropertiesDialog(H: HWND);
var
  PPrinterDevMode: PDevMode;

⌨️ 快捷键说明

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