喫茶XRAYトップページ

[スレッド全体
]

[7866] プリンタの印刷部数設定の不具合返信 削除
2014/9/2 (火) 10:54:42 Mr.XRAY
プリンタ設定ダイアログで設定した印刷部数が正常に取得できない現象です.
次のコードを実行します.

uses Printers;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrinterSetupDialog1.Execute() then begin
    LabeledEdit1.Text := IntToStr(Printer.Copies);
  end;
end;

(1) ボタンをクリックして,プリンタ設定ダイアログを表示
(2) [プロパティ] をクリックして,[プロパティ] ダイアログを表示
(3) [詳細設定] で [部数] を 2 以上にする
(4) [OK] ボタンを何回かクリックして,元に戻る
(5) Copiesの値を調べると,設定した値ではなく 1 になっている

図は,Windows 7 U64(SP1) + Delphi XE(UP1) での実行結果です.
この現象は,主に Windows 7 以降で発生するようです.
作成した EXE を Windows XP で実行した場合は,設定した部数が取得できます.

この現象は,大分前からネット上で話題になっています.
ワードやエクセル等の印刷でも発生していましたが,
現在は修正されているようです(家元ですからね).
マイクロソフトのフォーラムでも話題になっていました.

[011_プリンタドライバの情報を DEVMODE 構造体から取得]
http://mrxray.on.coocan.jp/Delphi/plSamples/011_DEVMODE_Structure.htm

のサンプルのように,DEVMODE 構造体の dmCopies の値も
1 になってしまいます.


[015] [01_[ 印刷 ] [ プリンタ設定 ] ダイアログ - PrintDlg 関数]
http://mrxray.on.coocan.jp/Delphi/plSamples/015_PrintDlgAPI.htm#01

のコードであれば,以下のように,設定した値を取得することができます.

  //ダイアログ表示
  if PrintDlg(PrintDlgRec) then begin
    //ここに印刷のコードを書く
    //ダイアログの設定内容が,構造体の各メンバーから取得できる
    ShowMessage(IntToStr(PrintDlgRec.nCopies));
  end;
 
また,[013_プリンタのプロパティ設定] のように,
DocumentProperties 関数で,プリンタのプロパティのダイアログだけで
設定した場合も,設定した部数が dmCopies で取得できます.

http://mrxray.on.coocan.jp/Delphi/plSamples/013_SetPrinterProperty.htm

 
対応策としては,現在のところ,

(1) [015] [01] のように,PrintDlg API を使用する
(2) プリンタのプロパティのダイアログだけで設定する
(3) 印刷部数の設定を別にして,印刷コードをループする
(4) 独自のダイアログを作成して,それで設定するようにする

でしょうか.
ただし,(1),(2) の場合,TPrinter オブジェクトに反映するには,
それなりの処理が必要となります.
(4) は (1) 〜 (3) も関係することになりますが,プリンタ独自のプロパティ
をどうするかという問題もあります.

[備考]
Printer.Copies := 13; は機能します.
また,TPrintDialog から設定した印刷部数の Copies プロパティの値は正しく
取得できます.


[QC Report #:105292]
[プリンタ設定ダイアログとページ設定ダイアログで,印刷部数が常に 1 に戻されてしまう]
[PrinterSetupDialog and PageSetupDialog alwasy reset Printer.Copies to 1 upon closing]
http://qc.embarcadero.com/wc/qcmain.aspx?d=105292


[7868] Re:プリンタの印刷部数設定の不具合返信 削除
2014/9/2 (火) 12:39:45 Mr.XRAY
> プリンタ設定ダイアログで設定した印刷部数が正常に取得できない現象です.

この現象は,Delphi だけではなく,VC, VB でも発生するようです.
(もしかしたら,本日現在では修正されているかも知れません.未確認です)
マイクロソフトのフォーラムの書き込みを読んだ限りでは,
マイクロソフトは,この現象の修正をするつもりはないように思われます.

なので,自衛しかないでしょう.
問題を抱えている方々の健闘をお祈りいたします (^^)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82