Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[6351] [질문] TPrinter / Canvas.Pen.Width가 이상해요?
강호규 [ ] 1002 읽음    1999-07-01 14:03
오늘은 좀 선선하군요!
작업하기 딱 좋은 날씨입니다.

델파이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;
//============================================ 끝


+ -

관련 글 리스트
6351 [질문] TPrinter / Canvas.Pen.Width가 이상해요? 강호규 1002 1999/07/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.