名前 題名 ▼ 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 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link