오늘은 좀 선선하군요!
작업하기 딱 좋은 날씨입니다.
델파이3,4에서 TPrinter를 이용한 인쇄부분에 관한 질문입니다.
강좌란에 있는 문서를 참조하여 만들었습니다.
모두 잘되는데, 한가지 Canvas.Pen.Width가 제대로
작동하지 않습니다. 설정치 보다 두껍게 인쇄가 됩니다.
왜? 라인이 두껍게 인쇄가 되는지?
이것을 해결하려면 어떤 방법이 있는지?
조언을 부탁드립니다.
//=======================================================
//아래에 소스를 같이 올립니다.
// 하이텔 비주얼 파워툴 동호회의 델마당 2월 세미나때에..
// 양병규(슈베르트)님이 강의하셨던 내용입니다.
// 조금 고쳐 테스트 하였습니다.
// 기준 점을 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
{그린다}
Printer.Canvas.Pen.Width := 1; //펜의 폭을 설정한다.
Printer.Canvas.MoveTo(0,0);
Printer.Canvas.LineTo(1000,0); //가로 10Cm의 라인을 긋는다.
{여기서 finally 구문은 필히 사용해서 프린터가 먹통이 되는일이 없게..}
finally
{기준점을 원래대로 복구한다}
SetOrgPoint( Point( OldOrg.cx, OldOrg.cy ) );
{매핑모드를 원래대로 복구한다}
SetMapMode( Printer.Handle, OldMap );
{인쇄를 종료한다}
Printer.EndDoc;
end;
end;
//============================================ 끝
|