プリンタのプロパティの設定を反映させるには?

解決


Boo  2004-10-27 01:15:48  No: 11536

プリンタのプロパティを表示させて、その変更内容を更新させる方法が
わからないので、教えていただきたいです。

プリンタのプロパティ画面は以下のサイトを参考にすると開けました。
http://forum.nifty.com/fdelphi/samples/00613.html

変更後、プロパティ画面を閉じ、再度画面を開くと先ほどの
変更内容が反映されていません。

つまらない質問かもしれませんが、ご教授願います。


Mr.XRAY  URL  2004-10-27 03:49:34  No: 11537

やってみました.プリンタの選択と,DevModeの修正部分を除いたコード
をButtonクリックで実行しました.
ダイアログで変更した後,ダイアログを閉じて,またボタンをクリック
しました.変更内容が反映されていました.

WindowsXP(SP2) + Delphi5(Pro)で確認しました.


Boo  2004-10-27 07:58:04  No: 11538

もう一度してみましたが、やっぱり
設定できてませんでした。

こちらの環境はWin2000(Pro)+Delphi6(Personal)です。

他の方法でできる方法はないのでしょうか??


Mr.XRAY  URL  2004-10-27 08:35:49  No: 11539

どんなコードでテストしたのですか?
私のテストしたコードです.環境は前回のレスの通りです.

var
   Device,Driver,Port: array[0..512] of Char;
   DeviceMode : THandle;

//====================================================================
//  プリンタのプロパティダイアログを表示
//  usesにPrinters,WinSpoolが必要
//  ダイアログで設定した内容が,次回表示にも反映される.
//  ただし,当然であるが,プログラムを終了すれば元に戻る
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
     DevMode : PDeviceMode;
begin
     Printer.GetPrinter(Device,Driver,Port,DeviceMode);
     DevMode :=GlobalLock(DeviceMode);
     try
       DocumentProperties(Application.Handle,
                          0,
                          Device,
                          DevMode^,
                          DevMode^,
                          DM_PROMPT or DM_MODIFY or DM_COPY);
     finally
       GlobalUnlock(DeviceMode);
     end;
end;

>他の方法でできる方法はないのでしょうか??

とんな様にしたかわかりませんと,なんとも検討のしようがありません
からね.わたしは神様でもサンタクロースでもないので,Booさんが実行
したことはわかりません.


Boo  2004-10-27 20:37:17  No: 11540

できました。Mr.XRAY さんありがとうございます。
おそらく、毎回デフォルトの設定に戻していたのかと思います。
以下にできなかったコードを記します。

var
  Device, Driver, Port: array[0..79] of char;
  DeviceMode: THandle;

procedure TForm1.Button1Click(Sender: TObject);
var
  DevMode: PDeviceMode;
begin
  if ComboBox1.ItemIndex < 0 then begin
    Exit;
  end;

  Printer.PrinterIndex := ComboBox1.ItemIndex;
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  //以下の2行が間違いだと思います。
  Printer.SetPrinter(Device, Driver, Port, 0);
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  //Mr.XRAYさんのコードにはありませんでした。

  DevMode := GlobalLock(DeviceMode);
  try
    DocumentProperties(Application.Handle,
                       0,
                       Device,
                       DevMode^,
                       DevMode^,
                       DM_PROMPT or DM_MODIFY or DM_COPY);
  finally
    GlobalUnlock(DeviceMode);
  end;
end;


Mr.XRAY  URL  2004-10-27 22:25:37  No: 11541

>Printer.PrinterIndex := ComboBox1.ItemIndex;

プリンタを指定するこのコードですと,そのプリンタのデフォルトの設定
に戻ってしいます.
この部分だけ削除してやってみて下さい.

私のコードはGetPrinterが1行だけの手抜きコードとなっていますが,

  //現在のプリンタの設定を取得
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, Port, 0);
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);

の方が確実です.Booさんが参照したURLのSample蔵に解説したサンプルが
あったと思います.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加