안녕하세요.
임기열씨가 작성한 사용자정의용지 만큼만 프린트 하는 루틴과
양병규씨가 작성한 매핑모드 MM_LOMETRIC 을 이용한 mm 단위로 인쇄하는 루틴을
합친것입니다.
그러니깐 mm 단위로 인쇄하되 도트 프린터에서 사용자정의 용지크기 만큼만
인쇄하고 다음장을 찍기위해 준비하려고 합니다.
(레이저,잉크젯 A4 에서는 용지크기에 상관없이 1장을 프린트 하니깐 상관없습니다.)
제가..왕초보라서...델파이 관련 사이트들을 거의 다 뒤졌으나
뭐부터 잘못된건지 모르겠습니다.
지금 며칠째 테스트하고 있습니다. 흑흑~~
꼭 좀... 부탁드립니다.
procedure TForm.xPrint;
var
OldMap : Integer;
OldOrg : TSize;
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
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
// 사용자 정의 용지로 바꾸는 예
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 := 200; //단위는 mm
pDMode^.dmPaperLength := 140; //단위는 mm
// 용지 공급을 바꾸는 예
// pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
// pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
Printer.BeginDoc;
OldMap := SetMapMode( Printer.Handle, MM_LOMETRIC );
OldOrg := SetOrgPoint( Point(inicontent.leftmargin,inicontent.topmargin) );
try
xPrinting;
finally
SetOrgPoint( Point( OldOrg.cx, OldOrg.cy ) ); // 기준점을 원래대로 복구
SetMapMode( Printer.Handle, OldMap ); // 매핑모드를 원래대로 복구
Printer.EndDoc;
end;
end;
Procedure TForm.xPrinting;
begin
Printer.Canvas.TextOut(300,-230,"안녕!"); // y좌표를 +,- 바꿔서 해도..
end;