PrintSetPrinter 関数でアプリケーションが利用するプリンターを変更できない

バグ情報

PrintSetPrinter 関数を呼び出してもアプリケーションが利用するプリンターを変更できない事象が報告されています。

Bug ID 6919
Product PowerBuilder JP
ステータス Build 2272 用に修正モジュールが提供されています
発生バージョン EN 12.6以前 2017 (R2) 2017 (R3) 2019
JP 12.6以前 2017 (R2) 2017 (R3) 2019

:発生バージョン    :解決済み、未発生    :未確認

(2017 以外のバージョンについてはリリースされている最新リビジョンでの状況です)

詳細

PrintSetPrinter 関数を呼び出して利用可能なプリンターを指定した場合、戻り値として成功 (1) を返しますが、アプリケーションが利用するプリンターを変更できません。

本不具合については PrintGetPrinter 関数を呼び出すことにより、アプリケーションが利用するプリンターが強制的に OS のデフォルトプリンターに戻されてしまうことが原因であることが判明しました。

また、PrintSetup 関数で「プリンターの設定」ダイアログを開いた際にも、同様に OS のデフォルトプリンターに変更されます。ダイアログで [OK] ボタンをクリックすることで指定したプリンタに変更することができますが、[キャンセル] や [×] ボタンによって画面を終了した場合は、ダイアログを開いたタイミングで変更された OS のデフォルトプリンターが現行のプリンターとして適用されます。

PrintSetPrinter 関数自体には問題はなく、プリンター変更後に PrintGetPrinter 関数を呼び出さなければ指定したプリンターで正常に印刷することができます。

回避策

  • OS のデフォルトプリンターを変更する
    • 本不具合が発生しているビルドでは OS のデフォルトプリンターを変更することでアプリケーションが印刷に使用するプリンターを変更できるので、印刷処理の前にデフォルトプリンターを変更してください。

※本来、PowerBuilder の仕様ではアプリケーションの実行中にデフォルトプリンターを変更しても現行のプリンターは変更されません。 この方法は OS のデフォルトプリンターを変更した場合にアプリで使用するプリンターが変更されてしまう不具合の動作を利用しています。 この不具合についてはバグ情報「アプリの実行中に OS のプリンターを変更すると現行のプリンターが変更される」をご確認ください。

  • 修正パッチを適用する
  • PrintGetPrinter 関数を使用しない
    • PrintGetPrinter 関数を呼び出すことにより意図せずプリンターが変更されるため、PrintGetPrinter 関数を使用しないでください。
  • 「プリンターの設定」ダイアログボックスを [キャンセル] や [×] ボタンで閉じない
    • PrintSetup 関数で「プリンターの設定」ダイアログボックスを表示した場合もプリンターが OS のデフォルトプリンターに変更されるため、「プリンターの設定」ダイアログボックスでは [キャンセル] ボタンや [×] ボタンでダイアログを閉じずに使用するプリンターを選択して [OK] ボタンをクリックしてください。
バグ情報 一覧を見る
PowerBuilder マイグレーション
PowerBuilder 2019 R3 日本語版リリース 紹介動画