2009-08-04 16 views
2

私は、プリンタに含まれる特定のプリンタにQuckReportsを印刷するDelphiサービスを作成しました。プリンタリスト。私は自分のルーチンにプリンタ名を渡し、適切なインデックスを取得するためにprinter.printers配列を検索します。次に、これを行います。Delphi Printer.Printers not refresh

QuickRep1.PrinterSettings.PrinterIndex:= iIndex;

ヘルプファイルには、printer.refreshのヘルプファイルに「現在のシステムにインストールされているフォントまたはプリンタが変更されたときに、呼び出しを更新する」と表示されます。ですから、printer.printers配列に対してプリンタ名を調べる前にリフレッシュを呼び出します。

私のインストールでは、この機能が正しく動作しません。プリンターが追加/削除された場合や、プロファイルの下にプリンターがあるユーザーがログオンした場合、サービスが停止して再開されるまで、リストは更新されないようです。

この機能はサービスでは機能しませんか? これが発生しているインストールでは、「仮想サービス」を利用します。これはそれと関係がありますか?

ありがとうございました。

答えて

2

私の経験と理解は、プリンタアレイはアプリケーションの起動時にのみ更新されます。新しいプリンタがインストールされるたびに、アプリケーションを再起動して正しいリストを取得する必要があります。

私はこの自分と別の経験を聞いて好奇心が強いです。

編集:以下のコメントから。私はTPrinters.Refresh()がプリンタリストを更新することを確認する小さなテストプログラムを書いた。

+1

TPrinters.GetPrinters()メソッドが初めて呼び出されたときに配列がロードされます。後続の呼び出しはリストを更新しません。しかし、個々のプリンタをリフレッシュする必要がある場合は、TPrinterにRefresh()メソッドがあります。 –

+0

<<個々のプリンタをリフレッシュする必要がある場合、TPrinterにはRefresh()メソッドがあります。>> - リストをリフレッシュするようには見えません。個々のプリンタをリフレッシュするだけですか?テスト・アプリケーションとテスト・サービスを作成して、より多くの情報を見つけることができるかどうかを確認します。 –

+0

まあ、私は愚かな、シンプルなテストプログラム(D7、XP)とリフレッシュプリンタTStringListをクリアしたと感じる。その後のプリンタリストのチェックには正しいリストが含まれていました。それはずっと前の一点では機能していなかったようですが、QR問題の霧のようなものでした。 ログインしているサービスとして表示される内容に影響を与える可能性があります。 – dverespey