Trocar impressora padrâo em tempo de execução

Delphi

19/06/2004

Olá, tem um aplicativo em Delphi 7 que preciso que troque a impressora padrão em tempo de execução e depois volte a impressora anterior. Não pode aparece a caixa de dialogo de impressoras para nao ter chance do usuário trocar.

Já tentei usar o Getprinter e o SetPrinter passando o caminho da impressora na rede, aparentemente ele seta a impressora, mas nao troca. No Delphi 5 funciona.

Alguém tem alguma idéia?

Obrigado pela atenção!

André Bortolotto


Bortolotto

Bortolotto

Curtidas 0

Respostas

Bon Jovi

Bon Jovi

19/06/2004

Tente pelo ´nome´ da impressora. Isso não modifica a impressora padrão do Windows, mas faz sua impressão usar a impressora desejada. Se esse for o caso...

procedure TForm1.Imprime(Impressora: string);
var
  oPrinter: Printers.TPrinter;
  Indice: integer;
begin
  oPrinter := Printers.TPrinter.Create;
  try
    Indice := oPrinter.Printers.IndexOf(Impressora);
    if Indice < 0 then
    begin
      ShowMessage(Impressora + ´ não existe´);
      Exit;
    end;
    oPrinter.PrinterIndex := Indice;
    oPrinter.BeginDoc;
    oPrinter.Canvas.TextOut(10, 10, ´Impresso em ´ + oPrinter.Printers.Strings[oPrinter.PrinterIndex]);
    oPrinter.EndDoc;
  finally
    FreeAndNil(oPrinter);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Imprime(´Epson Stylus COLOR 400 ESC/P 2´);
  Imprime(´Epson Stylus COLOR 740 ESC/P 2´);
end;


Testei no Delphi 7.


GOSTEI 0
Bortolotto

Bortolotto

19/06/2004

Testei a solução que me foi passada, mas infelizmente não funcionou... fala que a impressora selecionada não é válida.

Precisaria de uma solução que usasse o caminho da impressora na rede.

Obrigado pela atenção!



André


GOSTEI 0
Vinicius2k

Vinicius2k

19/06/2004

Colega,

Não testei, mas :
//636 - Mudar Impressora padrão pelo nome
procedure SetDefaultPrinter(PrinterName: String);
var
  I: Integer;
  Device : PChar;
  Driver : Pchar;
  Port : Pchar;
  HdeviceMode: Thandle;
  aPrinter : TPrinter;
begin
  Printer.PrinterIndex := -1;
  getmem(Device, 255);
  getmem(Driver, 255);
  getmem(Port, 255); 
  aPrinter := TPrinter.create;
  for I := 0 to Printer.printers.Count-1 do
  begin
  if Printer.printers[i] = PrinterName then
  begin
  aprinter.printerindex := i;
  aPrinter.getprinter
  (device, driver, port, HdeviceMode);
  StrCat(Device, ´,´);
  StrCat(Device, Driver );
  StrCat(Device, Port );
  WriteProfileString(´windows´, ´device´, Device);
  StrCopy( Device, ´windows´ );
  SendMessage(HWND_BROADCAST, WM_WININICHANGE,
  0, Longint(@Device));
  end;
  end;
  Freemem(Device, 255);
  Freemem(Driver, 255);
  Freemem(Port, 255);
  aPrinter.Free;
end; 

* dica extraída de DTDelphi 2.6

Espero ter ajudado...
T+


GOSTEI 0
POSTAR