- 註冊時間
 - 2006-3-13 
 - 最後登錄
 - 2025-7-23 
 - 在線時間
 - 675 小時 
 - 閱讀權限
 - 200 
 - 積分
 - 417 
 - 帖子
 - 1109 
 - 精華
 - 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 |   
 
  
 |