Impressão em impressora de rede
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.
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
Curtidas 0
Respostas
Massuda
02/01/2007
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); ...
GOSTEI 0
Programalista
02/01/2007
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!
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!
GOSTEI 0
Massuda
02/01/2007
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.
GOSTEI 0
Programalista
02/01/2007
Massuda, obrigado novamente. Quebrando a cabeça aqui, consegui implementar o código, veja abaixo:
Como sou programador iniciante, gostaria de sabe o que realmente fazem estes códigos.
Abraço,
Até +.
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é +.
GOSTEI 0
Massuda
02/01/2007
Na verdade, seguindo o modelo do meu post anterior, ficaria assim...
...mas, como escrevi antes, não uso gerador de relatórios, talvez não funcione nesse caso.
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;
GOSTEI 0