Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2004年02月14日] [更新 2016年04月20日] プリンタ設定コンポーネント
プリンタ設定コンポーネント
テストプログラム PrinterList
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro







プリンタ名の一覧表示と設定


PrinterList プロパティと PrinterName プロパティのテストプログラムで,実行時にプリンタを選択する際の参考プログラムです.この方法の利点は,必要でないプリンタ名をコンボボックスのリストから外すことによって,利用者の間違った選択を防止できることです.


図1
設計時画面
図2
実行画面
  • EPSON の文字があるプリンタ名だけがリストされる

リスト1
テストプログラムのコード
unit PrinterListUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, plSetPrinter, Buttons;

type

  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    plSetPrinter1: TplSetPrinter;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  Printers;

{$R *.DFM}

//=============================================================================
//  コンボボックスにプリンタのリストを作成
//  'EPSON'(大文字小文字の区別なし)があるプリンタのみリストする
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
  LPrinterNo   : Integer;
  LPrinterName : String;
begin
  ComboBox1.Clear;
  //コンボボックスは編集不可に
  ComboBox1.Style := csDropDownList;
  //上からABC順
  ComboBox1.Sorted := True;
  ComboBox1.Items.Assign(plSetPrinter1.PrinterList);

  for LPrinterNo := ComboBox1.Items.Count - 1 downto 0 do begin
    LPrinterName := AnsiUpperCase(ComboBox1.Items[LPrinterNo]);
    if Pos('EPSON', LPrinterName) = 0 then ComboBox1.Items.Delete(LPrinterNo);
  end;

  //プリンタ名プロパティと同じのがあればそれを選択
  //なければリスト先頭のプリンタを選択状態にする
  LPrinterName := plSetPrinter1.PrinterName;
  ComboBox1.ItemIndex := 0;
  for LPrinterNo := 0 to ComboBox1.Items.Count - 1 do begin
    if ComboBox1.Items[LPrinterNo] = LPrinterName then begin
      ComboBox1.ItemIndex := LPrinterNo;
      Break;
    end;
  end;

  //以下のコードでも可
  //ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(plSetPrinter1.PrinterName);
  //if ComboBox1.ItemIndex = -1 then ComboBox1.ItemIndex := 0;
end;
//=============================================================================
//  プリンタのプロパティダイアログを表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //コンボボックスのテキストでプリンタ名をセット
  plSetPrinter1.PrinterName := ComboBox1.Items[ComboBox1.ItemIndex];
  plSetPrinter1.Orientation := poLandscape;
  //設定確認のためにプロパティのダイアログを表示
  //選択したプリンタの設定ダイアログとなっている
  plSetPrinter1.ShowDialog;
end;

end.