Olá galera, nesta Quick Tips, irei mostra como podemos obter a lista de impressoras instaladas na nossa máquina local, porém conseguimos ainda verificar quais são locais e quais são em rede. Para construção deste exemplo vamos adicionar :

  • 1 TButton(BtnListarImpressoras)
  • 2 TListBox(ListBoxLocal, ListBoxRede)

WesleyPrinter01

Além de darmos uses em Printers, unit a qual contém as informações sobres as impressoras instaladas, além da possibilidade de configurar estas por sua vez.

Vamos agora as implementações do Clique do BtnListarImpressoras

unit uFrmPrincipal;
 interface
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Printers;
 type
 TFrmPrincipal = class(TForm)
 BtnListarImpressoras: TButton;
 ListBoxLocal: TListBox;
 ListBoxRede: TListBox;
 Label1: TLabel;
 Label2: TLabel;
 procedure BtnListarImpressorasClick(Sender: TObject);
 procedure ListBoxLocalClick(Sender: TObject);
 procedure ListBoxRedeClick(Sender: TObject);
 private
 function ImpressoraPadrao: String;
 procedure DefinirImpressoraPadrao(const xNome: String);
 { Private declarations }
 public
 { Public declarations }
 end;
 var
 FrmPrincipal: TFrmPrincipal;
 implementation
 {$R *.dfm}
 { Veja a implementação do clique do botão, onde separamos as impressoras entre local e rede, levando em consideração que o nome da impressora em rede contém no início os caracteres \\ indicando um endereço de rede }
 procedure TFrmPrincipal.BtnListarImpressorasClick(Sender: TObject);
 Var
   I : Integer;
 begin
   ListBoxLocal.Clear;
   ListBoxRede.Clear;
   for I := 0 to Printer.Printers.Count - 1 do
   begin
     if Pos('\\',Printer.Printers.Strings[I]) <> 0 then
       ListBoxRede.Items.Add(Printer.Printers.Strings[I])
     else
       ListBoxLocal.Items.Add(Printer.Printers.Strings[I]);
   end;
   Caption := ImpressoraPadrao;
 end;
  
 { Veja a implementação abaixo para definir uma impressora padrão }
 procedure TFrmPrincipal.DefinirImpressoraPadrao(const xNome: String);
 begin
     Printer.PrinterIndex := Printer.Printers.IndexOf(xNome);
 end;
  
 { Veja a implementação abaixo para saber qual é a impressora padrão }
 function TFrmPrincipal.ImpressoraPadrao :String; var
   aDevice : array[0..255] of char;
   aDriver : array[0..255] of char;
   aPort : array[0..255] of char;
   ahDMode : THandle;
 begin
   Printer.GetPrinter(aDevice, aDriver, aPort, ahDMode);
   Result := 'Impressora padrão : ' + aDevice;
 end;
  
 procedure TFrmPrincipal.ListBoxLocalClick(Sender: TObject);
 begin
   DefinirImpressoraPadrao(ListBoxLocal.Items.Strings[ListBoxLocal.ItemIndex]);
   Caption := ImpressoraPadrao;
 end;
  
 procedure TFrmPrincipal.ListBoxRedeClick(Sender: TObject);
 begin
   DefinirImpressoraPadrao(ListBoxRede.Items.Strings[ListBoxRede.ItemIndex]);
   Caption := ImpressoraPadrao;
 end;
  
 end.

Veja ao final o que acontece quando clicamos no BtnListarImpressora:

WesleyPrinter02

Fico por aqui ate à próxima Quick Tips. Veja o exemplo completo neste post para download.