정의되지 않은 크기의 용지로 출력하려고 팁에 나와있는 내용을
참고해서 다음과 같이 작성하였습니다.
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 에 맞게만 출력되어 나타납니다.
뭐가 잘못된걸까요....
코딩 중간에 한라인 주석처리 했습니다.
참고하세요.
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;