Q&A

  • 임의의 출력용지에 출력하기
정의되지 않은 크기의 용지로 출력하려고 팁에 나와있는 내용을
참고해서 다음과 같이 작성하였습니다.

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
     {
      pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
      pDMode^.dmPaperSize := DMPAPER_A3;
     }
    {}
      pDMode^.dmFields := pDMode^.dmFields or
                                      DM_PAPERSIZE or
                                      DM_PAPERWIDTH or
                                      DM_PAPERLENGTH;
      pDMode^.dmPaperSize := DMPAPER_USER;
      pDMode^.dmPaperWidth := 1200 ;
      pDMode^.dmPaperLength := 1200 ;

      pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
      {}
      GlobalUnlock(hDMode);
    end;
  end;

  ShowMessage('Width : '+IntToStr(Printer.PageWidth)+#13#10+
                        'Height : '+IntToStr(Printer.PageHeight));
end;

이와같이 해서 결과를 살펴보면
A3 사이즈로 한경우에는 프린터의 사이즈가 제대로 변경되어 나타납니다.
그런데 DMPAPER_USER로 한경우에는 1200,1200 이 나타나지 않고
A4 사이즈로 고정되어 나타납니다.

여기저기 관련 자료를 찾아봐도 소스들은 다 위와 같은형태인데
출력을 해도 계속 A4 에 맞게만 출력되어 나타납니다.

뭐가 잘못된걸까요....
1  COMMENTS
  • Profile
    이강승 2004.05.08 05:57
    저도 예전에 이 소스를 참고해서 작업한적이 있습니다.
    코딩 중간에 한라인 주석처리 했습니다.
    참고하세요.


    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
         {
          pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
          pDMode^.dmPaperSize := DMPAPER_A3;
         }
        {}
          pDMode^.dmFields := pDMode^.dmFields or
                                          DM_PAPERSIZE or
                                          DM_PAPERWIDTH or
                                          DM_PAPERLENGTH;
          pDMode^.dmPaperSize := DMPAPER_USER;
          pDMode^.dmPaperWidth := 1200 ;
          pDMode^.dmPaperLength := 1200 ;

    //  이부분을 막고 해보세요
    //      pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
          {}
          GlobalUnlock(hDMode);
        end;
      end;

      ShowMessage('Width : '+IntToStr(Printer.PageWidth)+#13#10+
                            'Height : '+IntToStr(Printer.PageHeight));
    end;