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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[170] 팁! 프린터 용지 알아내기와 설정
박지훈.임프 [cbuilder] 14188 읽음    1999-06-04 00:00
임프랍니다.. 어제는 비가왔습니다만.. 오늘도 팁은 나갑니다~
(물론 비온거랑 팁이 나가는건 여전히 아무런 관계가 없슴다...)
참.. 오늘의 팁이 나가기 전에.. ^^
저 하고 있던 프로젝트.. 오늘로 베타 발표하고 이제 며칠 푹 쉰답니다..
모두들 축하해주세요~ (거기 멀뚱히 보고만 있는분~! 뉘기여뉘기여~~)

오늘의 팁은, 프린터에 설정되어있는 용지의 종류 알아내기와 거꾸로 설정하기입니다.

그럼, 먼저 용지 종류를 알아내는 함수...

// C++ 코드
int __fastcall GetPaperSize(void)
{
    char Device[256], Driver[256], Port[256];
    THandle hDMode;
    TDevMode *ADevMode;
    Printer()->GetPrinter(Device, Driver, Port, hDMode);
    ADevMode = (TDevMode *)GlobalLock((void *)hDMode);
    GlobalUnlock((void *)hDMode);
    return ADevMode->dmPaperSize;
}


// 델파이 코드
function GetPaperSize: integer;
var
  ADevMode: PDevMode;
  hDMode: THandle;
  Device, Driver, Port: array[0..255] of Char;
begin
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  ADevMode := GlobalLock(hDMode);
  GlobalUnlock(hDMode);
  result := ADevMode.dmPaperSize;
end;

여기서 리턴되는 값들은 wingdi.h 에 선언되어 있는 매크로 값들입니다.
예를 들어 레터 용지는 DMPAPER_LETTER, A4용지는 DMPAPER_A4, 이런 식이죠.
자세히 알아보시려면 wingdi.h 를 참고하시기 바랍니다. 무신 용지 종류가
요로콤 많나, 하고 놀라실겁니다. (대충 봐도 60~70가지는 됩니다.)

반대로 이 값으로 프린터의 용지를 세팅하는 함수...

// C++ 코드
void __fastcall SetPaperSize(int pSize)
{
    char Device[256], Driver[256], Port[256];
    THandle hDMode;

    TDevMode *ADevMode;
    Printer()->GetPrinter(Device, Driver, Port, hDMode);
    ADevMode = (TDevMode *)GlobalLock((void *)hDMode);
    ADevMode->dmPaperSize = pSize;
    GlobalUnlock((void *)hDMode);
    Printer()->SetPrinter(Device, Driver, Port, hDMode);
}


// 델파이 코드
procedure SetPaperSize(pSize: Integer);
var
  ADevMode: PDevMode;
  hDMode: THandle;
  Device, Driver, Port: array[0..255] of Char;
begin
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  ADevMode := GlobalLock(hDMode);   //80Column = 258;  136Column = 259;
  ADevMode.dmPaperSize := pSize;
  GlobalUnlock(hDMode);
  Printer.SetPrinter(Device, Driver, Port, hDMode);
end;

대충 보면.. 위의 값을 알아내는 함수랑 내용이 비슷하죠?
이 함수들에서 주인공이라고 할 수 있는 TPrinter::GetPrinter(),
TPrinter::SetPrinter(), 그리고 TDevMode(이것은 api의 DEVMODE 구조체를 typedef
한것에 불과합니다) 는 이렇게 용지 세팅에 관계된 것 외에도 많은 정보를
가지고 있습니다. TPrinter::PaperWidth와 TPrinter::PaperHeight로도 알아낼 수
있는 용지의 폭과 길이, 그리고 프린터 드라이버의 버전, 드라이버 이름,
디더링 타입 등등, 프린터 드라이버가 가지고 있는 대부분의 정보가 이 두개의
함수와 구조체로 알아낼 수 있습니다.
관심이 있으신 분들은 한번 자세히 알아보시구요.

그럼, 도움되시길 바라면서, 이만..

독립문에서 임펠리테리였습니다.

+ -

관련 글 리스트
170 팁! 프린터 용지 알아내기와 설정 박지훈.임프 14188 1999/06/04
(링크)     C++Builder Tip'N Tricks > 팁! 프린터 용지 알아내기와 설정
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.