PDA

Ver la Versión Completa : comandos de impresion


federicorl
07-09-2006, 21:06:17
en otro hilo hemos estado tratando de hacer el manejo de las secuencias de escape de las impresoras, yo trabajo con la tm-t90 de epson y ya encontre el comando para cortar el papel es #27 +#105
y me funciono definiendolo como un constante como se ve abajo

const pNewLn = #10 +#13; // Salto de linea
pCuton = #27 +#105; //Corte #27 +#105

begin
PWrite(pNewLn );
PWrite(pNewLn );
PWrite(' hola como estas');
PWrite(pNewLn );
PWrite(pNewLn );
PWrite(' Preparando Prueba de Corte');
PWrite(pNewLn );
PWrite(pCuton);
end;

lo que ahora quiero es poder manejarlo como una variable que en un campo se capture esta secuencia y se ejecute, pero no funciona asi con uan variable, asi:

const
pNewLn = #10 +#13; // Salto de linea
Var
Varcut :String;
Begin

Varcut := edit1.Text;
PWrite(' Preparando Prueba de Corte');
PWrite(pNewLn );
PWrite(Varcut);

la impresora me imprime el comando en vez de ejecutarlo, alguien podria decirme porque y como lo soluciono, el procedimiento es el que se publico en otro hilo y la presento a continuacion:

Procedure TForm1.PWrite(s:String);
var PT :Integer;
P :Pchar;
Begin
PT := FileOpen('lpt1',fmOpenWrite ); // Abrimos la impresora como un archivo
P := PChar( s ); //convertimos la cadena a un PChar
FileWrite(PT,P^,length( s )); //escribimos a la impresora
FileClose(PT);//cerrar el archivo de la impresora
end;

de antemano gracias por su tiempo y disculpen si la pregunta es muy tonta

seoane
07-09-2006, 21:22:33
Varcut := edit1.Text;


Edit1.text ¿que contiene?. Supongo que la secuencia de caracteres #27#105, pero como metes esos caracteres en el edit, con una sentencia como esta:


Edit1.text:= #27#105;


O lo escribes directamente en el edit. Porque puede que no estés introduciendo lo que piensas. Para comprobarlo utiliza algo como esto para saber exactamente que caracteres son:


ShowMessage('#'+IntToStr(Byte(Edit1.text[1]))+',#'+IntToStr(Byte(Edit1.text[2])));

federicorl
07-09-2006, 21:51:13
si obiamente estoy introducuiendo en el EDIT #27 +#105, el problema es cuando llamo, no lo ejecuta mas bien lo imprime

seoane
07-09-2006, 22:00:25
Sigo dándole vueltas al asunto, en el edit ¿estas introduciendo la cadena de texto '#27+#105'?, es decir la cadena de texto tal cual. Porque así el resultado es una cadena de 8 caracteres y no los 2 que tu necesitas para hacer el corte. Se me ocurre lo siguiente para que puedas introducir los caracteres especiales como el 27:


function Decode(Str: string): string;
var
i: integer;
begin
Result:= '';
while Length(Str) > 0 do
begin
if Copy(Str, 1, 1) = '%' then
begin
if not TryStrToInt('$' + Copy(Str, 2, 2),i) then
begin
Result:= '';
Exit;
end;
Result:= Result + Char(i);
Delete(Str, 1, 2);
end else Result:= Result + Copy(Str, 1, 1);
Delete(Str,1,1);
end;
end;


var
s: string;
begin
s:= Decode(Edit1.text);
PWrite(s);
end;


De este modo, por ejemplo, si queremos imprimir esto:

Hola mundo
(Cortar)


Escribiriamos en el edit


Hola mundo%0A%0D%1B%69


Es decir sustituimos los caracteres problematicos por un '%' seguido del codigo correspondiente en hexadecimal. Espero que te sirva.

marcoszorrilla
07-09-2006, 22:03:49
edit2.text:=Pnewln;

Esto si te funcionará, lo que estás haciendo como te dice Seoane es:
'#10#13'

y en realidad lo que tiene que contener son los códigos de alimentación de línea: 10 y retorno de carro 13.

Un Saludo.