Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   comandos de impresion (https://www.clubdelphi.com/foros/showthread.php?t=35352)

federicorl 07-09-2006 21:06:17

comandos de impresion
 
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

Cita:

Empezado por federicorl
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:

Código Delphi [-]
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:

Código Delphi [-]
ShowMessage('#'+IntToStr(Byte(Edit1.text[1]))+',#'+IntToStr(Byte(Edit1.text[2])));

federicorl 07-09-2006 21:51:13

si, estoy tecleando en el Edit
 
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:

Código Delphi [-]
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:
Código:

Hola mundo
(Cortar)

Escribiriamos en el edit

Código:

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

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 21:26:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi