bestlong 怕失憶論壇
標題:
如何設定印表機的紙張大小
[打印本頁]
作者:
bestlong
時間:
2010-5-4 13:54
標題:
如何設定印表機的紙張大小
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;
複製代碼
http://delphi.ktop.com.tw/board.php?cid=30&fid=100&tid=42907
作者:
bestlong
時間:
2010-5-4 15:02
http://delphi.ktop.com.tw/board. ... id=71&tid=96703
歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/)
Powered by Discuz! X1.5