terça-feira, junho 06, 2006

Obtendo as impressoras instaladas II - Dica de Delphi

Mais uma "rotininha" pra obter as impressoras instaladas na máquina. Essa é cortesia do site www.guiadodelphi.com.br

// Esta rotina lê todas as impressoras instaladas no windows
// e coloca dentro de um ComboBox e não se esqueça de adicionar
// na cláusula uses a unit Printers

procedure TForm1.FormShow(Sender: TObject);
var I : Integer;
begin
ComboBox1.Items.Clear;
For I:= 1 to Printer.Printers.Count do
Begin
if Pos('LPT', printer.Printers.Strings[I-1]) > 0Then
ComboBox1.Items.Add('LPT1')
Else if Pos('\\', printer.Printers.Strings[I-1]) > 0 Then
ComboBox1.Items.Add(Copy(printer.Printers.Strings[I-1],
Pos('\\', printer.Printers.Strings[I-1]),
length(printer.Printers.Strings[I-1]) -
Pos('\\', printer.Printers.Strings[I-1]) + 1));
End;
End;
// e quando apertar o botao imprimir, o evento pega qual a impressora
// que você escolheu atravéz do ComboBox e Imprimi.
procedure TForm1.btImprimirClick(Sender: TObject);
var I:Integer;
Arquivo : TextFile;
begin
AssignFile(Arquivo,ComboBox1.Value);
Rewrite(Arquivo);
WriteLn(Arquivo, 'TESTE DE IMPRESSAO - 1');
WriteLn(Arquivo, 'TESTE DE IMPRESSAO - 2');
WriteLn(Arquivo, 'TESTE DE IMPRESSAO - 3');
WriteLn(Arquivo, 'TESTE DE IMPRESSAO - 4');
CloseFile(Arquivo);
end;

Obtendo as impressoras instaladas - Dica de Delphi

Quando vamos imprimir diretamente para a impressora é necessário saber quais são as que estão instaladas na máquina, sejam elas locais ou de rede. A rotina abaixo tem essa finalidade. Ela foi obtida através do colega Mgrasser, do Forum Active Delphi.

unit VerificaImpressora;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, Printers, Buttons, WinSpool;

type
TPrinterInfo = record
SeverName : PChar;
PrinterName : PChar;
ShareName : PChar;
PortName : PChar;
DriverName : PChar;
Comment : PChar;
Location : PChar;
DeviceMode : PDeviceModeA;
SepFile : PChar;
PrintProcessor : PChar;
DataType : PChar;
Parameters : PChar;
SecurityDescriptor: PSecurityDescriptor;
Attributes : Cardinal;
DefaultPriority : Cardinal;
StartTime : Cardinal;
UntilTime : Cardinal;
Status : Cardinal;
Jobs : Cardinal;
AveragePPM : Cardinal;
end;

TForm1 = class(TForm)
// Memo1: TMemo;
// ComboBox1: TComboBox;
Memo1: TMemo;
ComboBox1: TComboBox;
procedure FormShow(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function GetCurrentPrinterInformation: TPrinterInfo;
function GetCurrentPrinterHandle: THandle;

var
Form1: TForm1;

implementation

{$R *.dfm}

function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;

function GetCurrentPrinterInformation: TPrinterInfo;
var
hPrinter : THandle;
pInfo: PPrinterInfo2;
bytesNeeded: DWORD;
begin
hprinter := GetCurrentPrinterHandle;
try
Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
pInfo := AllocMem( bytesNeeded );
try
Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded );
Result.SeverName := pInfo^.pServerName;
Result.PrinterName := pInfo^.pPrinterName;
Result.ShareName := pInfo^.pShareName;
Result.PortName := pInfo^.pPortName;
Result.DriverName := pInfo^.pDriverName;
Result.Comment := pInfo^.pComment;
Result.Location := pInfo^.pLocation;
Result.DeviceMode := pInfo^.pDevMode;
Result.SepFile := pInfo^.pSepFile;
Result.PrintProcessor := pInfo^.pPrintProcessor;
Result.DataType := pInfo^.pDatatype;
Result.Parameters := pInfo^.pParameters;
Result.SecurityDescriptor := pInfo^.pSecurityDescriptor;
Result.Attributes := pInfo^.Attributes;
Result.DefaultPriority := pInfo^.DefaultPriority;
Result.StartTime := pInfo^.StartTime;
Result.UntilTime := pInfo^.UntilTime;
Result.Status := pInfo^.Status;
Result.Jobs := pInfo^.cJobs;
Result.AveragePPM := pInfo^.AveragePPM;
finally
FreeMem( pInfo );
end;
finally
ClosePrinter( hPrinter );
end;
end;


procedure TForm1.FormShow(Sender: TObject);
begin
ComboBox1.Items.Assign(Printer.Printers);
ComboBox1.ItemIndex := 0;
ComboBox1.OnChange(nil);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
PrinterInfo: TPrinterInfo;
begin
Printer.PrinterIndex := ComboBox1.ItemIndex;
PrinterInfo := GetCurrentPrinterInformation;
memo1.Clear;
with memo1.Lines do
begin
Add('GENERAL INFORMATION');
Add('');
Add('ServerName: ' + PrinterInfo.SeverName);
Add('PrinterName: ' + PrinterInfo.PrinterName);
Add('ShareName: ' + PrinterInfo.ShareName);
Add('PortName: ' + PrinterInfo.PortName);
Add('DriverName: ' + PrinterInfo.DriverName);
Add('Comment: ' + PrinterInfo.Comment);
Add('Location: ' + PrinterInfo.Location);
Add('SepFile: ' + PrinterInfo.SepFile);
Add('PrintProcessor: ' + PrinterInfo.PrintProcessor);
Add('DataType: ' + PrinterInfo.DataType);
Add('Parameters: ' + PrinterInfo.Parameters);
Add('Attributes: ' + IntToStr(PrinterInfo.Attributes));
Add('DefaultPriority: ' + IntToStr(PrinterInfo.DefaultPriority));
Add('StartTime: ' + IntToStr(PrinterInfo.StartTime));
Add('UntilTime: ' + IntToStr(PrinterInfo.UntilTime));
Add('Status: ' + IntToStr(PrinterInfo.Status));
Add('Jobs: ' + IntToStr(PrinterInfo.Jobs));
Add('AveragePPM: ' + IntToStr(PrinterInfo.AveragePPM));
Add('');
Add('DEVICEMODE INFORMATION');
Add('');

Add('DeviceName: ' + PrinterInfo.DeviceMode.dmDeviceName);
Add('SpecVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmSpecVersion));
Add('DriverVersion: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverVersion));
Add('Size: ' + IntToStr(PrinterInfo.DeviceMode.dmSize));
Add('DriverExtra: ' + IntToStr(PrinterInfo.DeviceMode.dmDriverExtra));
Add('Fields: ' + IntToStr(PrinterInfo.DeviceMode.dmFields));
Add('Orientation: ' + IntToStr(PrinterInfo.DeviceMode.dmOrientation));
Add('PaperSize: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperSize));
Add('PaperLength: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperLength));
Add('PaperWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPaperWidth));
Add('Scale: ' + IntToStr(PrinterInfo.DeviceMode.dmScale));
Add('Copies: ' + IntToStr(PrinterInfo.DeviceMode.dmCopies));
Add('DefaultSource: ' + IntToStr(PrinterInfo.DeviceMode.dmDefaultSource));
Add('PrintQuality: ' + IntToStr(PrinterInfo.DeviceMode.dmPrintQuality));
Add('Color: ' + IntToStr(PrinterInfo.DeviceMode.dmColor));
Add('Duplex: ' + IntToStr(PrinterInfo.DeviceMode.dmDuplex));
Add('YResolution: ' + IntToStr(PrinterInfo.DeviceMode.dmYResolution));
Add('TTOption: ' + IntToStr(PrinterInfo.DeviceMode.dmTTOption));
Add('Collate: ' + IntToStr(PrinterInfo.DeviceMode.dmCollate));
Add('LogPixels: ' + IntToStr(PrinterInfo.DeviceMode.dmLogPixels));
Add('BitsPerPel: ' + IntToStr(PrinterInfo.DeviceMode.dmBitsPerPel));
Add('PelsWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsWidth));
Add('PelsHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPelsHeight));
Add('DisplayFlags: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFlags));
Add('DisplayFrequency: ' + IntToStr(PrinterInfo.DeviceMode.dmDisplayFrequency));
Add('ICMMethod: ' + IntToStr(PrinterInfo.DeviceMode.dmICMMethod));
Add('ICMintent: ' + IntToStr(PrinterInfo.DeviceMode.dmICMIntent));
Add('MediaType: ' + IntToStr(PrinterInfo.DeviceMode.dmMediaType));
Add('DitherType: ' + IntToStr(PrinterInfo.DeviceMode.dmDitherType));
Add('ICCManufacturer: ' + IntToStr(PrinterInfo.DeviceMode.dmICCManufacturer));
Add('ICCModel: ' + IntToStr(PrinterInfo.DeviceMode.dmICCModel));
Add('PanningWidth: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningWidth));
Add('PanningHeight: ' + IntToStr(PrinterInfo.DeviceMode.dmPanningHeight));
end;
end;

end.