Buscar impressora automaticamente durante execução
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
eu uso Delphi 2010 e Rave Report para desenvolver os relatórios
Jeovanne Berger
Curtidas 0
Respostas
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:
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.
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
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é
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
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.
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