2013-11-29 29 views
5

Delphiを使用してプリンタに印刷ジョブを送信したいと思います。理想的には、ユーザーが印刷ダイアログからプリンタを選択することなく、これを実行できるようにしたいと考えています。デルファイでデフォルト以外のプリンタに印刷

Windowsのデフォルトプリンタ以外のプリンタを使用したいと考えています。何で正確と一致している必要があり、私は印刷するとき

Vcl.Printers.Printer.PrinterIndex := Vcl.Printers.Printer.Printers.IndexOf('My Printer Name'); 

しかし、それは

答えて

9

名前がIndexOfに渡されたデフォルトのプリンタを使用してに戻ります:

私はプリンタ名でプリンタを設定しようとしています働くためにPrinter.Printersに。 正確なではない場合は、IndexOf-1を返します。これは「デフォルトプリンタを使用する」を意味します。

IndexOf('hp laserjet')を使用すると、実際のプリンタ名がHP LaserJetまたはhp laserjet 5の場合は-1が返されます。

正確な名前を指定していない場合は、リストを反復して部分一致を実行できます。典型的なシステムではこれが効率的であるために利用可能なプリンタが多すぎることはほとんどありません。私たちは数十ダース持っており、それはいいです。

私たちのオフィスは3つの基本部門(財政、管理、カスタマーサービス)に分かれています。それぞれにはピンフィード(ドットマトリックス)ラベルを保持する別のプリンタがありますが、すべての部門で動作するアプリがあります。

function GetLabelPrinterIndex: Integer; 
var 
    i: Integer; 
begin 
    for i := 0 to Printer.Printers.Count - 1 do 
    if AnsiContainsText(Printer.Printers[i], `Labels`) then 
    begin 
     Exit(i); 
    end; 
    Result := -1; 
end; 
:私たちは、ループとの適切なプリンタを見つけることができるなど Fiscal LabelsAdmin Labels、 - 代わりにアプリケーションがラベルプリンタを選択することで実行されていた部門を知ったのは、我々は言葉だけ Labelsを含むプリンタ名を与えます

注:参考文献から接頭辞VCLを削除します。プラットフォーム間でコードを使用できないことを意味します。 Printersがuses句に含まれていることを確認した場合は、Printers.Printerのみを使用し、ターゲットプラットフォーム(VCL Win32/64、FMX 32/64、OSX)を変更すると、ビルド構成に基づいてuses句が調整されます。