Impressora padrão

Delphi

03/09/2005

Bom galera, o problema é o seguinte:

Eu preciso definir uma impresssora como padrão.
No meu caso no sistema operaciona tem várias impressoras instalada, mais só que na hora de imprimir preciso definir outra como padrão, pois irá ser impressor através de um software frepdf xp que tem a impressora freepdf instalada.

até agora consegui alista de impressora instalada, falta definir a que eu quero como padrão.

ver código

procedure TForm1.FormCreate(Sender: TObject);
Var
Qt, i: integer;
begin
Qt := Printer.Printers.Count;
for i := 0 to Qt - 1 do
ListBox1.Items.Text := ListBox1.Items.Text + Printer.Printers.Strings[i];
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
x: string;
begin
x := ListBox1.Items.Strings[ListBox1.ItemIndex];
ShowMessage(x);
end;

aluém poderia completar a definição da impressora

Grato


Zlink

Zlink

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

03/09/2005

Colega,

Com esta procedure vc consegue setar uma impressora como padrão, informando seu nome:
procedure SetDefaultPrinter(S: String);
var
  DefaultPrinter: Array[0..79] of Char;
  APrinter: TPrinter;
  ADevice, ADriver, APort: PChar;
  HDevMode: THandle;
  I: Integer;
  { **** }
  function FetchStr(S: String): String;
  var
    I: Integer;
  begin
    S := TrimLeft(S);
    I := Pos(´,´, S);
    if I = 0 then Result := S
      else Result := Copy(S, 1, (I-1));
  end;
  { **** }
begin
  GetProfileString(´windows´, ´device´, ´´, DefaultPrinter, SizeOf(DefaultPrinter)-1);
  if FetchStr(DefaultPrinter) = S then Exit;
  Printer.PrinterIndex := -1;
  APrinter := TPrinter.Create;
  GetMem(ADevice, 255);
  GetMem(ADriver, 255);
  GetMem(APort, 255);
  for I := 0 to (Printer.Printers.Count - 1) do
  begin
    if Printer.Printers[I] = S then
    begin
      APrinter.PrinterIndex := I;
      APrinter.GetPrinter(ADevice, ADriver, APort, HDevMode);
      StrCat(ADevice, ´,´);
      StrCat(ADevice, ADriver);
      StrCat(ADevice, APort);
      WriteProfileString(´windows´, ´device´, ADevice);
      StrCopy(ADevice, ´windows´ );
      SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ADevice));
    end;
  end;
  FreeMem(ADevice, 255);
  FreeMem(ADriver, 255);
  FreeMem(APort, 255);
  APrinter.Free;
end;


Para usar:
SetDefaultPrinter(´Nome da impressora´);


PS: Adicione a unit ´Printers´ na lista de uses da seção ´Implementation´.
Espero ter ajudado.

T+


GOSTEI 0
Zlink

Zlink

03/09/2005

Meu caro amigo Vinicius2K

Ficou Dmais, muito obrigado pela ajuda.
Eu estou usando assim

procedure TForm1.ListBox1Click(Sender: TObject);
var
x: string;
begin
x := ListBox1.Items.Strings[ListBox1.ItemIndex];
[b:dea648a40b] SetDefaultPrinter(x);[/b:dea648a40b]
ShowMessage(x);
end;

end.


GOSTEI 0
POSTAR