Rave: como fazer o rave obdecer a troca de impressora?

Delphi

08/01/2007

tenho o seguinte problema:
preciso que o rave imprima um relatório em determinada impressora(HP 1300) e outros relatórios em outra impressora, mas ao trocar de impressora via código simplesmente o rave não troca de impressora continua aparecendo na janela Output Options a outra impressora a mudança só ocorre mesmo quando fecho o programa e abro novamente.

Utilizo este código:

function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port: array[0..255] of Char;
Mode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, Mode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;

procedure TFrmImpressao.Button1Click(Sender: TObject);
var
I: Integer;
Device : PChar;
Driver : Pchar;
Port : Pchar;
HdeviceMode: Thandle;
aPrinter : TPrinter;
begin
Button1.Enabled:=False;
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] = cmbPrinter.Text 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;
Button1.Enabled:=True;
end;

procedure TFrmImpressao.FormShow(Sender: TObject);
var
I: Integer;
X: Integer;
begin
X := Printer.PrinterIndex;
for I:= 0 to Printer.Printers.Count-1 do begin
Printer.PrinterIndex := I;
GetCurrentPrinterPort);
cmbPrinter.Items.Add(Printer.Printers[I]);
end;
Printer.PrinterIndex := X;
end;

Desde já agradeço a quem puder me ajudar.


Exvasp

Exvasp

Curtidas 0

Respostas

Exvasp

Exvasp

08/01/2007

Mais uma explicação:
Tem como mudar a selected printer que aparece na janela output options do rave via código?

Desde já muito obrigado.

tenho o seguinte problema: preciso que o rave imprima um relatório em determinada impressora(HP 1300) e outros relatórios em outra impressora, mas ao trocar de impressora via código simplesmente o rave não troca de impressora continua aparecendo na janela Output Options a outra impressora a mudança só ocorre mesmo quando fecho o programa e abro novamente. Utilizo este código: function GetCurrentPrinterHandle: THandle; var Device, Driver, Port: array[0..255] of Char; Mode: THandle; begin Printer.GetPrinter(Device, Driver, Port, Mode); if not OpenPrinter(@Device, Result, nil) then RaiseLastWin32Error; end; procedure TFrmImpressao.Button1Click(Sender: TObject); var I: Integer; Device : PChar; Driver : Pchar; Port : Pchar; HdeviceMode: Thandle; aPrinter : TPrinter; begin Button1.Enabled:=False; 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] = cmbPrinter.Text 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; Button1.Enabled:=True; end; procedure TFrmImpressao.FormShow(Sender: TObject); var I: Integer; X: Integer; begin X := Printer.PrinterIndex; for I:= 0 to Printer.Printers.Count-1 do begin Printer.PrinterIndex := I; GetCurrentPrinterPort); cmbPrinter.Items.Add(Printer.Printers[I]); end; Printer.PrinterIndex := X; end; Desde já agradeço a quem puder me ajudar.



GOSTEI 0
POSTAR