程式設定紙張大小後, 如何設定紙張上下左右之列印邊界 |
尚未結案
|
Morselin
一般會員 發表:3 回覆:3 積分:1 註冊:2004-10-16 發送簡訊給我 |
請教各位先進,
經查詢 k.top 的文章後,
現可指定印表機及控制紙張的尺寸,
但現列印 8cm x 4cm , 間距 2.4mm 左右的標籤紙時,
卻只能列印其中的 18mm 高度範圍....
其餘部份似成了高度的邊界....4-1.8 = 22mm ??
不知該如何下指令來設定其邊界??
謝謝.... 程式如下:
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; sl : TStringList; i,j,y,idx: integer; begin sl := TStringList.Create; sl.Assign(Printer.printers); idx:= sl.indexof('LQ1170C'); sl.Free; if idx=-1 then raise exception.Create('找不到印表機或印表機未連線'); Printer.PrinterIndex := idx; Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin {Set to legal} pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize; pDMode^.dmPaperSize := DMPAPER_LEGAL; {Set to custom size} pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH; pDMode^.dmPaperSize := DMPAPER_USER; pDMode^.dmPaperWidth := 800 {紙張寬度, 以 0.1mm為一單位}; pDMode^.dmPaperLength := 425 {紙張長度, 以 0.1mm為一單位}; {Set the bin to use} pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL; GlobalUnlock(hDMode); end; end; Printer.PrinterIndex := Printer.PrinterIndex; for i:=1 to 2 do begin Printer.BeginDoc; Printer.Canvas.TextOut( 00, 0, '1234567890123456789012345678901234567890 1'); Printer.Canvas.TextOut( 00, 20, '1234567890123456789012345678901234567890 2'); Printer.Canvas.TextOut( 00,40, '1234567890123456789012345678901234567890 3'); Printer.Canvas.TextOut( 00, 60, '1234567890123456789012345678901234567890 4'); Printer.Canvas.TextOut( 00, 80, '1234567890123456789012345678901234567890 5'); Printer.Canvas.TextOut( 00, 100, '1234567890123456789012345678901234567890 6'); Printer.Canvas.TextOut( 00, 120, '1234567890123456789012345678901234567890 7'); Printer.EndDoc; end; end; |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
Morselin
一般會員 發表:3 回覆:3 積分:1 註冊:2004-10-16 發送簡訊給我 |
感謝, 不過參考之後印出來還是一樣的狀況....
參照國外 delphi 的文章抓 margin出來看是有改變....
但印出來還是一樣....
unit setptr_size001; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Printers; type TMargins = record Left, Top, Right, Bottom: Double end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var PixelsPerInch : TPoint; PhysPageSize : TPoint; OffsetStart : TPoint; PageRes : TPoint; Margins : TMargins; Device : array[0..255] of char; Driver : array[0..255] of char; Port : array[0..255] of char; hDMode : THandle; PDMode : PDEVMODE; sl : TStringList; i,j,y,idx : integer; begin sl := TStringList.Create; sl.Assign(Printer.printers); idx:= sl.indexof('LQ1170C'); sl.Free; if idx=-1 then raise exception.Create('找不到印表機或印表機未連線'); Printer.PrinterIndex := idx; // 此段設定列印紙張大小 ============================================= Printer.GetPrinter(Device, Driver, Port, hDMode); if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); if pDMode <> nil then begin {Set to legal} pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize; pDMode^.dmPaperSize := DMPAPER_LEGAL; {Set to custom size} pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH; pDMode^.dmPaperSize := DMPAPER_USER; pDMode^.dmPaperWidth := 800 ; //紙張寬度, 以 0.1mm為一單位 pDMode^.dmPaperLength := 425 ; //紙張長度, 以 0.1mm為一單位 pDMode^.dmPanningWidth:= 780 ; pDMode^.dmPanningHeight:=405 ; {Set the bin to use} pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL; pDMode^.dmDefaultSource := DMBIN_MANUAL; GlobalUnlock(hDMode); end; end; // 此段設定列印紙張邊界 ============================================= PixelsPerInch.y := GetDeviceCaps(Printer.Handle, LOGPIXELSY); // Get the Verticle resolution of printer PixelsPerInch.x := GetDeviceCaps(Printer.Handle, LOGPIXELSX); // Get the Horizon resolution of printer Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil, @PhysPageSize); Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil, @OffsetStart); PageRes.y := GetDeviceCaps(Printer.Handle, VERTRES); PageRes.x := GetDeviceCaps(Printer.Handle, HORZRES); label1.caption:=floattostr(Margins.top); label2.caption:=floattostr(Margins.bottom); label3.caption:=floattostr(Margins.left); label4.caption:=floattostr(Margins.right); // Top Margin Margins.Top := OffsetStart.y / PixelsPerInch.y; // Left Margin Margins.Left := OffsetStart.x / PixelsPerInch.x; // Bottom Margin Margins.Bottom := ((PhysPageSize.y - PageRes.y) / PixelsPerInch.y) - (OffsetStart.y / PixelsPerInch.y); // Right Margin Margins.Right := ((PhysPageSize.x - PageRes.x) / PixelsPerInch.x) - (OffsetStart.x / PixelsPerInch.x); label5.caption:=floattostr(Margins.top); label6.caption:=floattostr(Margins.bottom); label7.caption:=floattostr(Margins.left); label8.caption:=floattostr(Margins.right); for i:=1 to 2 do begin Printer.BeginDoc; Printer.Canvas.TextOut( 00, 0, '1234567890123456789012345678901234567890 1'); Printer.Canvas.TextOut( 00, 20, '1234567890123456789012345678901234567890 2'); Printer.Canvas.TextOut( 00, 40, '1234567890123456789012345678901234567890 3'); Printer.Canvas.TextOut( 00, 60, '1234567890123456789012345678901234567890 4'); Printer.Canvas.TextOut( 00, 80, '1234567890123456789012345678901234567890 5'); Printer.Canvas.TextOut( 00, 100, '1234567890123456789012345678901234567890 6'); Printer.Canvas.TextOut( 00, 120, '1234567890123456789012345678901234567890 7'); Printer.EndDoc; end; end; end. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |