Q&A

  • 프린터용지를 제어판(프린터)에서 일일이 바꾸지 않고 프로그램에서 셋팅할수있는 방법?
A4용과 사용자정의형 두가지 종류의 용지를 인쇄할려고 합니다.

용지를 바꿔서 인쇄할때마다 제어판(프린터)을 왔다갔다 할려니

너무 번거럽네요.

그래서 혹시나 용지설정을 건드릴수있는 방법이 없을까하고 이렇게 올립니다.

가르쳐주십시요!



1  COMMENTS
  • Profile
    김영대 1999.09.29 19:41
    윤진화 wrote:

    > A4용과 사용자정의형 두가지 종류의 용지를 인쇄할려고 합니다.

    > 용지를 바꿔서 인쇄할때마다 제어판(프린터)을 왔다갔다 할려니

    > 너무 번거럽네요.

    > 그래서 혹시나 용지설정을 건드릴수있는 방법이 없을까하고 이렇게 올립니다.

    > 가르쳐주십시요!



    // Printer의 DevMode 를 사용하여 변경할 수 있습니다

    // 아래 코드는 프린터용지의 방향, 크기 등을 변경하는 코드입니다

    // Windows.pas에서 DMPAPER_ 로 시작하는 상수값을 찾아보시면 용지 종류를

    // 알 수 있습니다



    // 제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm) 의

    // "Delphi Tip, Trick"에서 "프린터" 로 검색해 보시면 몇가지

    // 다른 자료도 보실 수 있습니다



    procedure TForm1.Button1Click(Sender: TObject);

    var

    Device : array[0..255] of char;

    Driver : array[0..255] of char;

    Port : array[0..255] of char;

    hDMode : THandle;

    PDMode : PDEVMODE;

    begin

    Printer.PrinterIndex := Printer.PrinterIndex;

    Printer.GetPrinter(Device, Driver, Port, hDMode);

    if hDMode <> 0 then

    begin

    pDMode := GlobalLock(hDMode);

    if pDMode <> nil then

    begin

    {legal 용지로 바꾸는 예}

    pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;

    pDMode^.dmPaperSize := DMPAPER_LEGAL; // Windows.pas에서 DMPAPER_ 로 시작하는 상수값을 찾아보세요



    (*

    {사용자 정의 용지로 바꾸는 예}

    pDMode^.dmOrientation := DMORIENT_PORTRAIT;

    pDMode^.dmFields := pDMode^.dmFields or

    DM_ORIENTATION or

    DM_PAPERSIZE or

    DM_PAPERWIDTH or

    DM_PAPERLENGTH;

    pDMode^.dmPaperSize := DMPAPER_USER;

    pDMode^.dmPaperWidth := 500 {단위는 mm}

    pDMode^.dmPaperLength := 300 {단위는 mm}



    {용지 공급을 바꾸는 예}

    pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;

    pDMode^.dmDefaultSource := DMBIN_MANUAL;

    *)



    GlobalUnlock(hDMode);

    end;

    end;

    Printer.PrinterIndex := Printer.PrinterIndex;



    Printer.BeginDoc;

    Printer.Canvas.TextOut(100,100, 'Test 1');

    Printer.EndDoc;

    end;