본문 바로가기
Delphi Tip/출력

델파이 인쇄 출력 4편

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

델파이 인쇄 출력

728x90

 

 

 

인쇄루틴의 기본 형태

 

기준점 설정 등을 이용해서 전체 인쇄루틴이 갖추어야 할 기본적인 형태를 알아 보겠습니다.

 

대충 설명을 하면 이렇게 됩니다.

 

1. 인쇄를 시작한다.

2. 현재의 매핑모드를 변수에 저장하면서 새로운 매핑모드를 적용시킨다.

3. 현재의 기준점을 변수에 저장하면서 새로운 기준점을 적용시킨다.

4. 그린다.

5. 원래의 기준점을 복구한다.

6. 원래의 매핑모드를 복구한다.

7. 인쇄를 종료한다.

 

예제를 작성해 볼까요?

 

// 그리는 루틴

procedure DrawPage( Canvas: TCanvas );

begin

  Canvas.Rectangle( 0, 0, 1000, -200 );

end;

 

// 기준 점을 APoint로 바꾸고 현재의 기준점을 리턴한다.

function SetOrgPoint( APoint: TPoint ): TSize;

var

  Org: TPoint;

begin

  Escape( Printer.Canvas.Handle, GETPRINTINGOFFSET, 0, nil, @Org );

  SetWindowOrgEx( Printer.Handle, Org.X-APoint.X, APoint.Y-Org.Y, @Result );

end;

 

//메인 루틴

procedure TMain_Form.Button10Click(Sender: TObject);

var

  OldMap: Integer; OldOrg: TSize;

begin

  {인쇄를 시작한다}

  Printer.BeginDoc;

 

  {현재 매핑모드를 oldMap에 저장하고 새로운 매핑모드(0.1mm)를 적용한다}

  OldMap := SetMapMode( Printer.Handle, MM_LOMETRIC );

 

  {현재의 기준점을 OldOrg에 저장하고 새로운 기준점(20mm)을 적용한다}

  OldOrg := SetOrgPoint( Point( 200, 200 ) );

  try

    {그린다}

    DrawPage( Printer.Canvas );

    {여기서 finally 구문은 필히 사용해서 프린터가 먹통이 되는일이 없게..}

  finally

    {기준점을 원래대로 복구한다}

    SetOrgPoint( Point( OldOrg.cx, OldOrg.cy ) );

 

    {매핑모드를 원래대로 복구한다}

    SetMapMode( Printer.Handle, OldMap );

 

    {인쇄를 종료한다}

    Printer.EndDoc;

  end;

end;

 

지금 까지 강좌를 잘 이해했다면 별 어려움이 없을 겁니다.

 

새로운 사실은..

프린터의 여백을 구하는 일인데...

 

특별히 프린터의 여백을 한번에 구해주는 API는 없습니다.

그래서 Escape를 직접써서 프린터에서 직접 여백을 구했습니다.

 

Escape를 이용하면 프린터의 각종 정보를 얻어올 수 있습니다.

단! Escape로 얻어 오는 정보는 그 자체가 표준화가 되어있는 부분이 있고

표준화되지 않고 특정 프린터에만 적용이되는 부분이 있습니다.

 

프린터의 여백은 GETPRINTINGOFFSET를 이용하면 될수 있도록

표준화가 되어있습니다.

 

728x90
반응형

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

델파이 인쇄 출력 6편  (0) 2023.09.04
델파이 인쇄 출력 5편  (0) 2023.09.01
델파이 인쇄 출력 3편  (0) 2023.08.29
델파이 인쇄 출력 2편  (0) 2023.08.28
델파이 인쇄 출력 1편  (0) 2023.08.25

댓글