- 註冊時間
- 2006-3-13
- 最後登錄
- 2025-1-10
- 在線時間
- 673 小時
- 閱讀權限
- 200
- 積分
- 417
- 帖子
- 1107
- 精華
- 0
- UID
- 2
  
|
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 |
|