以Printer.Canvas.TextOut的方式列印,紙張大小如何設 |
尚未結案
|
Jack0323
初階會員 發表:22 回覆:70 積分:28 註冊:2002-03-13 發送簡訊給我 |
有請各位高手幫幫忙:真的是很急 ^_^" 我用這段程式列印一段文字檔
印表機驅動程式的紙張大小也都設成B4了
但是印出來都是A4大小的格式
是否我在那個地方没有設定好範圍
還請各位高手幫幫忙
印表機 EPSON LQ 2180C WIN2000的預設Driver try
AssignFile(aFile,pmFullFile);
ReSet(aFile);
Printer.Orientation := poLandscape ;
Printer.BeginDoc;
Printer.Canvas.Font.Size := 12;
Printer.Canvas.Font.Name := '細明體';
while not EOF(aFile) do
begin
Readln(aFile,aStr);
Printer.Canvas.TextOut(3*16,1,aStr);
end;
finally
Printer.EndDoc;
CloseFile(aFile);
end;
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
How to set the printer paper size: http://www.lmc-mediaagentur.de/dpool/tips/0170.htm
var Device, Driver, Port: array[0..80] of Char; DevMode: THandle; pDevmode: PDeviceMode; begin {Get printer device name etc.} Printer.GetPrinter(Device, Driver, Port, DevMode); {force reload of DEVMODE} Printer.SetPrinter(Device, Driver, Port, 0) ; {get DEVMODE handle} Printer.GetPrinter(Device, Driver, Port, DevMode); if Devmode <> 0 then begin {lock it to get pointer to DEVMODE record} pDevMode := GlobalLock( Devmode ); if pDevmode <> Nil then try with pDevmode^ do begin {modify paper size} dmPapersize := DMPAPER_B5; {tell printer driver that dmPapersize field contains data it needs to inspect} dmFields := dmFields or DM_PAPERSIZE; end; finally {unlock DEVMODE handle} GlobalUnlock( Devmode ); end; end; end; uses winspool; procedure GetBinnames( sl: TStrings ); Type TBinName = Array [0..23] of Char; TBinNameArray = Array [1..High(Integer) div Sizeof( TBinName )] of TBinName; PBinnameArray = ^TBinNameArray; TBinArray = Array [1..High(Integer) div Sizeof(Word)] of Word; PBinArray = ^TBinArray; var Device, Driver, Port: Array [0..255] of Char; hDevMode: THandle; i, numBinNames, numBins, temp: Integer; pBinNames: PBinnameArray; pBins: PBinArray; begin Printer.PrinterIndex := - 1; Printer.GetPrinter(Device, Driver, Port, hDevmode); numBinNames := WinSpool.DeviceCapabilities( Device, Port, DC_BINNAMES, Nil, Nil ); numBins := WinSpool.DeviceCapabilities( Device, Port, DC_BINS, Nil, Nil ); if numBins <> numBinNames then begin raise Exception.Create('DeviceCapabilities reports different number of bins and ' 'bin names!'); end; if numBinNames > 0 then begin pBins := Nil; GetMem( pBinNames, numBinNames * Sizeof( TBinname )); GetMem( pBins, numBins * Sizeof(Word)); try WinSpool.DeviceCapabilities( Device, Port, DC_BINNAMES, Pchar( pBinNames ), Nil); WinSpool.DeviceCapabilities( Device, Port, DC_BINS, Pchar( pBins ), Nil ); sl.clear; for i:= 1 to numBinNames do begin temp := pBins^[i]; sl.addObject( pBinNames^[i], TObject( temp )); end; finally FreeMem( pBinNames ); if pBins <> Nil then FreeMem( pBins ); end; end; end; var aDrvName, aPrtName, aPortName: Array[0..127] of Char; aDeviceMode: THandle; PDevMode: ^TDevMode; i: Integer; begin with Printer do begin GetPrinter(aDrvName, aPrtName, aPortName, aDeviceMode); PDevMode := GlobalLock(aDeviceMode); try if PDevMode^.dmPaperSize = DMPAPER_A4 then ShowMessage('A4') else if PDevMode^.dmPaperSize = DMPAPER_A3 then ShowMessage('A3') else begin ShowMessage('Size not supported!' #13 'Resetting papersize to A4'); PDevMode^.dmPaperSize := DMPAPER_A4; end; finally GlobalUnlock(aDeviceMode); end; end; end;--- Everything I say is a lie. --<-<-<@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |