Fórum Buscar impressora automaticamente durante execução #400025

29/04/2011

0

Boa tardeestou desenvolvendo uma forma em um dos meus software que determinados relatórios puxem certas impressoras da rede automaticamente sem precisar de trocar no setup da impressão ou colocar a impressora como padrão,porem não sei como fazer isto, será que alguém poderia me ajudar?
eu uso Delphi 2010 e Rave Report para desenvolver os relatórios
Jeovanne Berger

Jeovanne Berger

Responder

Posts

29/04/2011

André Silveira

Eu faria assim:
Criaria um cadastro de impressora por relatório do sistema, utilizando um combobox para pegar as impressora que estão instaladas na máquina, ao selecionar qual impressora ele quer para cada relatório, salvaria no banco e na impressão do relatório setaria essa impressora como padrão e depois voltaria a impressora que era padrão antes de imprimir.
Mais ou menos assim:
Laço de preenchimento do combo:
For i := 0 to Printer.Printers.Count - 1 do    ComboBox.Items.Add(Printer.Printers[i]);/*Com esse laço pego todas impressora pelo nome*/
Criaria a procedure abaixo:
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; 

Antes de imprimir:var    PrinterPad, PrinterSel : String;
PrinterPad :=Printer.Printers[Printer.PrinterIndex] /*Pegando a impressora padrão pelo nome*/PrinterSel := Query.Fields[0].AsString; /*Carregando a impressora selecionada para ser a padrão
SetDefaultPrinter(PrinterSel); /*Setando ela como padrão
Mando  Imprimir; /*Imprimo o relatório
SetDefaultPrinter(PrinterPad); /*Volto a impressora padrão que tinha antes.


Responder

Gostei + 0

02/05/2011

Jeovanne Berger

eu consigo usar este forma no rave?pois as variaveis TPrinter não estão funcnionandotem algo que poderia fazer?obrigado
Responder

Gostei + 0

18/04/2013

José

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
Responder

Gostei + 0

18/04/2013

André Silveira

Qual o problema com o Printers ?

Quanto a funcionar no rave, funciona sim, uma vez que mudará a impressora padrão do windows (tem que ter elas instaladas na máquina) antes de imprimir e depois volta para a impressora que era a padrão antes de imprimir.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar