Buscar impressora automaticamente durante execução

Delphi

29/04/2011

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

Curtidas 0

Respostas

André Silveira

André Silveira

29/04/2011

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.


GOSTEI 0
Jeovanne Berger

Jeovanne Berger

29/04/2011

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

José

29/04/2011

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

André Silveira

29/04/2011

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.
GOSTEI 0
POSTAR