お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"LightReport2給紙と用紙サイズの指定方法"





LightReport2 で給紙方法と用紙サイズを指定するための関数です。
ロジック中の LightRep.Printer を Printer に変更すれば TPrinter を使用し
た印刷にも対応すると思います。

--- 使用例
サンプル蔵「プリンターの給紙方法と用紙サイズを列挙」を使用してプリンター
固有の給紙方法と用紙サイズの番号を取得します。
TLightRep の OnSetPrinter イベントで以下のように使用します。
(PaperSizeプロパティを必ず psNone に指定してください)

// NEC MultiImpact 700XX でフロントトラクタフィーダを指定してA4縦
procedure TForm1.LightRep1SetPrinter(Sender: TObject);
const
  BinNumber9x = 304; // Win98 での番号
  PaperNumber9x = 9;
  BinNumberNT = 272; // Win2000 での番号
  PaperNumberNT = 9;
begin
  inherited;
  LRSetPrinter(LightRep1, BinNumber9x, PaperNumber9x,
    BinNumberNT, PaperNumberNT, True);
end;

---  以下が関数です uses に LightRep を追加してください。

// プリンターの給紙方法(BinNumber)と用紙サイズ(PaperNumber)を指定する
// BinNumber, PaperNumber とも変更しない場合は 0 をセット
// Win9x系列 と WinNT系列 それぞれに指定する
// Portrait: True = 縦方向(用紙), False = 横方向(用紙)
procedure LRSetPrinter(LightRep: TLightRep; BinNumber9x, PaperNumber9x,
  BinNumberNT, PaperNumberNT: Integer; Portrait: Boolean);
var
  PrinterName, DriverName, PortName:array[0..255] of Char;
  DeviceMode: THandle;
  DevModeW: ^TDevMode;
begin
  StrPCopy(DriverName, 'WINSPOOL');
  StrPCopy(PrinterName,
    LightRep.Printer.Printers[LightRep.Printer.PrinterIndex]);
  StrPCopy(PortName, '');
  LightRep.Printer.GetPrinter(DriverName, PrinterName,
    PortName, DeviceMode);
  DevModeW := GlobalLock(DeviceMode);
  if DevModeW = nil then
    raise Exception.Create('用紙設定ができません!!');
  case Win32Platform of
    2:  // WindowsNT, Windows2000
      begin
        DevModeW.dmPaperSize := PaperNumberNT;       // 用紙サイズの指定
        DevModeW.dmDefaultSource := BinNumberNT;     // ビンの指定
      end;
    else  // Windows95, Windows98
      begin
        DevModeW.dmPaperSize := PaperNumber9x;       // 用紙サイズの指定
        DevModeW.dmDefaultSource := BinNumber9x;     // ビンの指定
      end;
  end;
  if  Portrait  then
    DevModeW.dmOrientation := DMORIENT_PORTRAIT
  else
    DevModeW.dmOrientation := DMORIENT_LANDSCAPE;
  GlobalUnlock(DeviceMode);
  LightRep.Printer.SetPrinter(DriverName, PrinterName,
    PortName, DeviceMode);
end;

                             2002/03/06(水) 01:50pm  Ohtaka(QZF12401)
 



Original document by Ohtaka          氏 ID:(QZF12401)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum