Q&A

  • 인쇄 미리보기 질문입니다.
프린트를 하는데에는 성공을 하였습니다. 그런데 미리보기 할려고 하니깐
감을 잡지 못하겠네요...
어떻게 해야 할까요?
가는 방법이나 이해가 되게 설명좀 부탁드리겠습니다.
고수님들의 답변 부탁드리겠습니다.

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;

// X,Y 위치에서 부터 Text를 뿌려줌.
procedure TextOutBase( X, Y: Integer; Text: String );
var
  Metrics : TTextMetric;
begin
  with Printer.Canvas do
    begin
      GetTextMetrics( Handle, Metrics );
      TextOut( X, Y + Metrics.tmAscent, Text);
    end;

end;

procedure PrintShow;
var
  OldMap: Integer;
  OldOrg: TSize;
  Metrics: TTextMetric;
begin

  // 프린터 시작...
  Printer.BeginDoc;
  OldMap:=SetMapMode( Printer.Handle, MM_LOMETRIC );  // 현재 매핑모드를 OldMap에 저장하고 새로운 매핑모드(0.1mm)를 적용한다.
  OldOrg:=SetOrgPoint( Point(20,20) );  // 200,200 현재의 기준점을 OldOrg에 저장하고 새로운 기준점(20mm)을 적용한다.

  with Canvas do
    begin
      Font.Name:='MS Sans Serif';
      Font.Style:=[];
      Font.PixelsPerInch:=GetDeviceCaps( Printer.Canvas.Handle, LOGPIXELSY);
    end;

  try
    with Printer.Canvas do
      begin
        TextOutBase(5,-40,'안녕하세요');
        TextOutBase(5,-80,'만나서 반갑습니다.');
      end;

  finally  
    SetOrgPoint( Point( OldOrg.cx, OldOrg.cy ) ); // 기준점을 원래대로 복구한다.
    SetMapMode( Printer.Handle, OldMap ); // 매핑모드를 원래대로 복구한다.
    Printer.EndDoc;
  end;

end;
0  COMMENTS