Q&A

  • 매핑모드로 도트프린터에서 사용자정의용지 크기만큼 인쇄??
안녕하세요.



임기열씨가 작성한 사용자정의용지 만큼만 프린트 하는 루틴과

양병규씨가 작성한 매핑모드 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;







0  COMMENTS