PDA

Ver la Versión Completa : imprimir en una red española con Delphi aleman


quim
02-04-2006, 11:10:36
Hola,

tengo la version Delphi 5 (aleman) y no puede imprimir desde un programa Delphi en una impresora de red española. La impresora funciona con qualquier otro programa sin problema alguno y la programa funciona cuando la impresora está directamente conectada o la red es aleman. El fallo indicado es (Fließkommaüberlauf) debordamiento de una variable del tipo "float".

quizas puedo compilar mi alguien el codigo siguiente con una version español
(con un boton) y enviarme la exe para verificar si el problema viene de la versión.


implementation

{$R *.DFM}

uses printers;

procedure TForm1.Button1Click(Sender: TObject);
begin
printer.begindoc;
printer.canvas.textout(100,100,'TEXT');
printer.enddoc;
end;

end.


Gracias, Quim - achim.reineke@gmx.de

Casimiro Notevi
02-04-2006, 13:06:29
!qué raro!, de todas formas, seguro que podemos ayudarte.

marcoszorrilla
02-04-2006, 19:14:17
Quizás el problema es que a la hora de mandarle a imprimir no encuentra la impresora al ser una impresora de Red, por otra parte el problema del idioma me lleva a pensar que el nombre de la impresora quizás no sea el mismo.

Porque no creas una rutina o función que te muestre las impresoras del sistema eliges una y luego lanzas el TextOut.

Mira este ejemplo, que yo suelo utilizar, aunque aquí la impresora ya la he guardado en una tabla y lo que hago es al mandar imprimir la vuelve a buscar en el sistema para asegurarse de que sigue existiendo.


Function GetImpresora(Impre:String):Integer;
Var
nCont:Integer;
lSearch:Boolean;
cNewLIne:String;
begin
lSearch:=False;
cNewLine:=Chr(10)+Chr(13);

For nCont:=0 to Printer.Printers.Count - 1 do
//buscamos la impresora en la lista del sistema
begin

if Pos(impre, Printer.Printers[nCont]) <> 0 then
begin
lSearch:=True;
Result:=nCont;
Break;
end;

end;

if lSearch = False then
begin
Result:=-1;
ShowMessage('Impresora no encontrada:'+cNewLine+Impre+cNewLine+'Se utilizará la predefinida.');
end;

end;

......
procedure TfrRepara.SpeedButton2Click(Sender: TObject);
begin

if Not DmAni.Impres.Locate('Impresora',Dmani2.ConfImprefacturas.Value,[]) then
DmAni.Impres.First;


Printer.PrinterIndex:=GetImpresora(DmAni2.ConfLptFacturas.value);
SetPaperSize(DmAni2.ConfAltoPapelFacturas.Value,Dmani2.ConfAnchoPapelFactuas.Value);

With Printer.Canvas do
begin
Printer.BeginDoc;
CabeceraRepara();
DetalleRepara();
Printer.EndDoc;
end;
end;



Tschüss.

quim
03-04-2006, 07:49:07
Hola morcoszorilla,

parece que hablas también aleman :) la función que me has enviado va bien.

GetImpresora('HP Color LaserJet 2600n');

detecta la impresora sin problemas y también puedo imprimir el código fuente (y todo lo quiero) desde mi ordenador. Pero imprimir desde el programa no va.

Me gustaría hacer una prueba con una versión "española" del mismo código. Quizas puedes enviarme la versión EXE.

Ciao, Quim

uses printers;
Function GetImpresora(Impre:String):Integer;
Var
nCont:Integer;
lSearch:Boolean;
cNewLIne:String;
begin
lSearch:=False;
cNewLine:=Chr(10)+Chr(13);
For nCont:=0 to Printer.Printers.Count - 1 do
//buscamos la impresora en la lista del sistema
begin
if Pos(impre, Printer.Printers[nCont]) <> 0 then
begin
lSearch:=True;
Result:=nCont;
Break;
end;
end;
if lSearch = False then
begin
Result:=-1;
ShowMessage('Impresora no encontrada:'+cNewLine+Impre+cNewLine+'Se utilizará la predefinida.');
end;
With Printer.Canvas do
begin
Printer.BeginDoc;
textout(100,100,'test');
Printer.EndDoc;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetImpresora('HP Color LaserJet 2600n');
end;
end.

marcoszorrilla
03-04-2006, 09:10:51
Compila esto lo acabo de probar y funciona sin problemas, claro que tienes que tener alguna impresora como predterminada.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Printers,
StdCtrls;

Function GetImpresora(Impre:String):Integer;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
GetImpresora('HP Color LaserJet 2600n');
With Printer.Canvas do
begin
Printer.BeginDoc;
textout(100,100,'test');
Printer.EndDoc;
end;
end;

Function GetImpresora(Impre:String):Integer;
Var
nCont:Integer;
lSearch:Boolean;
cNewLIne:String;
begin
lSearch:=False;
cNewLine:=Chr(10)+Chr(13);
For nCont:=0 to Printer.Printers.Count - 1 do
//buscamos la impresora en la lista del sistema
begin
if Pos(impre, Printer.Printers[nCont]) <> 0 then
begin
lSearch:=True;
Result:=nCont;
Break;
end;
end;

if lSearch = False then
begin
Result:=-1;
ShowMessage('Impresora no encontrada:'+cNewLine+Impre+cNewLine+'Se utilizará la predefinida.');
end;

end;


end.

Si quieres que te manda el Exe, me tienes que dar tu correo.

Auf Wiedersehen

quim
03-04-2006, 13:24:33
mi correo:

achim.reineke@gmx.de

gracias