Selecao DevMedia QUERO SER PRIME

Fórum Impressão em impressora de rede #335551

02/01/2007

0

Srs, muito boa tarde!

Desenvolvi um aplicativo client/server usando Delphi7, DBExpress e Firebird 1.5/2.0, QuickReport e Fortes Reports. Funciona perfeitamente. Adquirimos uma impressora laser HP2600n. Esta impressora foi instalada no servidor da empresa e foi ativado o compartilhamento. Sendo assim todos os usuários imprimem normalmente a partir dos aplicativos Office/OpenOffice, Internet e etc. mas o aplicativo desenvolvido em Delphi, simplesmente não imprime os relatórios criados com QuickReport e/ou Fortes Reports. Ao imprimir o aplicativo exibe o erro ´Floating Point Overflow´. Liguei para o suporte da HP e me disseram que só funcionaria se a impressora fosse instalada localmente, ou seja, sem usar a impressora compartilhada no servidor. Fiz o teste e realmente, com a impressora instalada localmente, o aplicativo imprime sem problemas, mas na impressora compartilhada, o erro persiste. Mas estou inconformado, será que não existe outra solução? Algum de vocês já passou por este problema e poderia me ajudar? Pois preciso que a impressora seja usada a partir do servidor, para poder controlar as cotas de impressões dos usuários.

Abraço a todos.


Programalista

Programalista

Responder

Posts

03/01/2007

Massuda

Experimente algo assim...
var
  Save8087CW: Word;
...
  Save8087CW := Get8087CW;
  (*
   * se o seu Delphi não tiver Get8087CW, use isto:
   *
   * asm
   *    FStCW [Save8087CW]
   * end;
   *)
  Set8087CW($133F);

  ... seu código para fazer a impressão ...
  
  Set8087CW(Save8087CW);
...



Responder

Gostei + 0

04/01/2007

Programalista

Olá Massuda, obrigado por responder.
Como e onde vou implementar a codificação que você me passou?
Sinceramente não tenho a menor idéia de como implementar, tentei por aqui mas não deu certo, possívelmente não estou sabendo como fazer.

Agradeço sua colaboração, abraço!


Responder

Gostei + 0

04/01/2007

Massuda

Eu não uso gerador de relatório, meu código é exatamente o que postei... onde escrevi ´seu código para fazer a impressão´ coloque sua chamada à impressão do relatório.


Responder

Gostei + 0

04/01/2007

Programalista

Massuda, obrigado novamente. Quebrando a cabeça aqui, consegui implementar o código, veja abaixo:
procedure TfrmLaudodimensional.btn_imprimirClick(Sender: TObject);
var
Save8087CW: Word;
begin
  inherited;
     Set8087CW($133F); // Para imprimir em printer com Ethernet.

     Beep;
     dmTools.sqlcds_rel_laudo.Close;
     dmTools.sqlcds_rel_laudo.Params[0].AsInteger:=dmTools.cds_laudoCODLAD.AsInteger;
     dmTools.sqlcds_rel_laudo.Open;
     if dmTools.sqlcds_rel_laudo.RecordCount = 0 then
          Application.MessageBox(Pchar(´Erro ao carregar o relatório!´),´Atenção ! ! !´,MB_OK+MB_ICONERROR)
     else
     with Tfrmrel_laudo.Create(nil) do
     begin
          qrp_rel_laudo.Preview;
          Free;
     end;
     asm
       FStCW [Save8087CW]
     end;
end;


Como sou programador iniciante, gostaria de sabe o que realmente fazem estes códigos.

Abraço,

Até +.


Responder

Gostei + 0

04/01/2007

Massuda

Na verdade, seguindo o modelo do meu post anterior, ficaria assim...
procedure TfrmLaudodimensional.btn_imprimirClick(Sender: TObject);
var
  Save8087CW: Word;
begin
  inherited;

  Beep;
...
  if dmTools.sqlcds_rel_laudo.RecordCount = 0 then
...
  else begin
    asm
      FStCW [Save8087CW]
    end;
    Set8087CW($133F);

    with Tfrmrel_laudo.Create(nil) do begin
      qrp_rel_laudo.Preview;
      Free;
    end;

    Set8087CW(Save8087CW);
  end;
end;
...mas, como escrevi antes, não uso gerador de relatórios, talvez não funcione nesse caso.


Responder

Gostei + 0

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

Aceitar