Entry No.
558
|
VCL - 一般 - Printers - Printing / Printers
Printers.Pas のバグ: 'デフォルト プリンタが存在しません'
|
1.02 |
2.01 |
3.0 |
3.01 |
3.02 |
4.0 |
4.01 |
4.02 |
4.03 |
5.0 |
5.01 |
6.0 |
6.01 |
6.02 |
Kylix 1.0 |
Unknown |
Unknown |
Unknown |
Unknown |
Unknown |
Exists |
Exists |
Exists |
Exists |
Exists |
Unknown |
Unknown |
Unknown |
Unknown |
N/A |
|
|
解説
|
|
Reported by Eivind Bakkestuen
デフォルトプリンタがネットワークプリンタだとこのメッセージが表示されてしまいます。印刷を行うにはプログラム実行中にユーザーが手動でローカルプリンタを選択しなければなりません。
再現方法:おそらくこれは、ワークステーションのスタートアップ時にサーバーからプリンタ一覧を取得するためにログインスクリプト機能を使用することに関連しています。
デフォルトプリンタは間違いなく選択されている(それがネットワークプリンタでも問題ないはずです)ので、これはバグです。
原因:
Printers.Pas 内の TPrinter.SetToDefaultPrinter ルーチンは、WIN32 API が返す全てのプリンタ名が常に同じようにキャピタライズされているものと仮定しています。デフォルトプリンタを決めているのはループ内の以下の行(D5 の printers.pas の 867 行目)で、これがこの問題の原因です。
if TPrinterDevice(Objects[I]).Device = Device then
このルーチンでログ出力を行い出力されたログファイルを解析したところ、Device は "HP Printer something" のような値なのに対し、デバイスリストは "HP PRINTER SOMETHING" のような値になっており、比較は失敗していました。
|
|
解決策 / 回避方法
|
回避方法はとても単純です:上の if 文の両辺に AnsiUpperCase() を使います。そうすることでデフォルトプリンタは正しく認識されました。
|
|