2011年1月26日水曜日

delphiでプリンター属性を変更する




delphiでプリンター属性を変更する 
以下がソース
ただし、Windows95までは権限が無かったのでOKだったが
NTからはプリンター属性を変更するのに権限が必要
Wins32のDevModeを使用しています

function SetPaper(PaperName: String): boolean;
var
 DrvName, PrtName, PortName: array[0..512] of char;
 h: THandle;
 pDevMode: PDEVICEMODE;
 PaperCount, i: Integer;
 Papers: array[0..255] of array[0..63] of Char;
 PaperNo: array[0..255] of Word;
begin
 Result := False;
 Printer.GetPrinter(DrvName, PrtName, PortName, h);
 Printer.SetPrinter(DrvName, PrtName, PortName, 0);
 Printer.GetPrinter(DrvName, PrtName, PortName, h);
 pDevMode := GlobalLock(h);
 try
   // 用紙サイズ配列数を取得
   PaperCount := DeviceCapabilities(DrvName, PortName, DC_PAPERS,
    nil, pDevMode);
   // 用紙サイズ番号をPaperNoに保存
   DeviceCapabilities(DrvName, PortName, DC_PAPERS, @PaperNo, nil);
   // 用紙サイズ名ををPapersに格納
   DeviceCapabilities(DrvName, PortName, DC_PAPERNAMES, @Papers, nil);
   // 指定した用紙名で用紙サイズ番号を検索
   for i := 0 to PaperCount -1 do
   begin
     if PaperName=Papers[i] then
     begin
       // 検索された用紙サイズのdmPaperSizeを設定
       pDevMode^.dmPaperSize := PaperNo[i];
       Result := True;
       Break;
     end;
   end;
 finally
   GlobalUnlock(h);
 end;
end;

0 件のコメント:

コメントを投稿