본문 바로가기
Delphi Tip/출력

델파이 인쇄 출력 2편

by MonoSoft 2023. 8. 28.
728x90
반응형

델파이 인쇄 출력

728x90

 

 

 

 

TPrinter의 사용법

 

Printers.pas에는 다음과 같은 function이

하나 전역으로 선언되어있습니다.

 

function Printer: TPrinter;

 

이것은 마치 Froms를 uses에 추가하면 자동으로

Application이나 Screen을 사용할 수 있듯이

uses에 Printers를 추가하면

Pritner라는 function을 사용할 수 있도록 되어있습니다.

 

TPrinter는 다음과 같은 구조를 가지고 있습니다.

 

// 생성, 소멸

constructor Create;

destructor Destroy; override; // 인쇄 제어

 

procedure Abort;

procedure BeginDoc;

procedure EndDoc;

procedure NewPage;

property Canvas: TCanvas ; //ReadOnly

property Copies: Integer;

property Orientation: TPrinterOrientation;

property Title: string; // 프린터 제어

procedure GetPrinter(ADevice, ADriver, APort: PChar; var ADeviceMode: THandle);

procedure SetPrinter(ADevice, ADriver, APort: PChar; ADeviceMode: THandle);

property Handle: HDC; //ReadOnly property PrinterIndex: Integer ;

property Printers: TStrings; //ReadOnly // 상태 정보

property Aborted: Boolean; //ReadOnly

property Capabilities: TPrinterCapabilities; //ReadOnly

property Fonts: TStrings; //ReadOnly

property PageHeight: Integer; //ReadOnly

property PageWidth: Integer; //ReadOnly

property PageNumber: Integer ; //ReadOnly

property Printing: Boolean; //ReadOnly

 

우리는 Printer를 사용하기 위하여

Create를 따로 해 줄 필요는 없습니다.

 

위의 전역 function에서 Create를 알아서 해주기 때문에

그저 처음부터 사용하기만 하면 됩니다.

 

다음은 위의 내용 중 가장 중요한 것입니다.

 

BeginDoc : 인쇄를 시작합니다.

EndDoc : 인쇄를 종료합니다.

NewPage : 한 페이지의 인쇄를 마치고 용지를 새것으로 바꿈니다.

Canvas : 문서의 내용을 그리는데 사용합니다.

Handle : 프린터의 DC핸들값을 말합니다.

 

이 네가지만 알면 이 강좌를 다 소화 할 수 있습니다.

 

그 외의 것들...

 

Abort

: 인쇄가 사용자에 의해 강제로 중단되었는지를 여부를 나타냅니다.

 

즉 이것이 True이면 이 후로는 더 해봐야 바로 삭제되므로

그 즉시 인쇄루틴을 중단하는것이 좋습니다.

 

 

Copies

문서 한 페이지를 몇 장씩 인쇄할지를 결정합니다.

이것은 Pritner.Copies := 2; 식으로 직접 할 수도 있지만

프린터다이아로그에 있는 "XX장씩 인쇄"의 값을 변경하면 이 값도 따라서 바뀝니다.

 

그렇다고 Copies가 2로 되어있다고해서

인쇄루틴을 두 번 반복해야 하는것은 아닙니다.

 

인쇄루틴은 한페이지에 한 번씩만 실행하면 사용자가

프린트다이아로그에서 2장씩 인쇄를 설정하면 윈도가 알아서

두장씩 뽑아 주므로 사실 거의 프로그래머가

이 부분을 처리해야 할 일은 없으며 인쇄옵션같은 폼을

따로 만들때의 경우에 주로 사용합니다.

 

Orientation

문서의 출력 방향을 가로 또는 세로 중 하나로 결정을 합니다.

 

 

Title

인쇄가 시작되면 윈도의 인쇄관리자가 실행되는데

인쇄관리자의 인쇄목록에 제목으로 사용합니다.

고로 인쇄 품질과는 아무런 관계가없습니다.

 

 

GetPrinter

프린터의 상태를 알아오는데 사용합니다.

 

 

SetPrinter

프린터의 상태를 설정하는데 사용합니다.

 

 

PrinterIndex

윈도에 여러개의 프린터가 설치되어있을 경우 현재 사용중인 프린터의 순서를 나타냅니다.

 

 

Printers

윈도에 설치된 프린터들의 목록을 보여줍니다.

 

 

Fonts

인쇄를 할때 사용할 수 있는 글꼴의 목록을 보여줍니다.

(화면에서 사용할 수 있는 글꼴 목록 = Screen.Fonts )

일부의 글꼴은 화면에서는 사용할 수 있으나 인쇄에서는

사용할 수 없는 글꼴도 있으므로 글꼴을 변경하기전

반드시 Fotns에 해당 글꼴이 포함되어있는지를 알아보고 변경해야 합니다.

 

ex)

NewFont := '굴림체';

if Printers.Fonts.Indexof( NewFont ) >= 0 then

Printers.Canvas.Font.Name := NewFont;

 

PageHeight : 용지에서 사용가능한 면적의 높이를 픽셀단위로 나타냅니다.
PageWidth : 용지에서 사용가능한 면적의 넓이를 픽셀단위로 나타냅니다.
PageNumber : 현재 인쇄되고 있는 페이지를 나타냅니다.
Printing : 인쇄 중 인지를 나타냅니다.

 

 

가장 간단한 인쇄루틴은 다음과 같습니다.

 

procedrue TForm1.Buton1Click(Sender: TObject);

begin

  Printer.BeginDoc;

  Printer.EndDoc;

end;

 

이렇게 하면 내용이 없으므로 그냥 빈 용지만 한 장 출력됩니다.

이번에는 페이지를 한번 바꿔 볼까요?

 

procedrue TForm1.Buton1Click(Sender: TObject);

begin

Printer.BeginDoc;

Pritter.NewPage;

Printer.EndDoc;

end;

 

이렇게 하면 내용이 없기는 마찬가지지만 페이지를

한 장 넘겼으므로 빈 용지가 두 장이 나옵니다.

 

728x90
반응형

'Delphi Tip > 출력' 카테고리의 다른 글

델파이 인쇄 출력 4편  (0) 2023.08.30
델파이 인쇄 출력 3편  (0) 2023.08.29
델파이 인쇄 출력 1편  (0) 2023.08.25
퀵레포트 추가 설치  (0) 2022.01.19
퀵레포트 -> ITF 변환 및 이미지 정보 변경  (0) 2022.01.18

댓글