Ir al contenido


Foto

Codigos de escape en delphi 2010


  • Por favor identifícate para responder
3 respuestas en este tema

#1 CarlosVIAC

CarlosVIAC

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 22 julio 2010 - 04:28

Hola,
Estoy haciendo un programa para mandar imprimir una nota de venta en una impresora termica, este programa manda codigos de escape para el corte del papel y apertura de cajon, y en delphi 2007 funciona de maravilla, si este mismo programa lo ejecuto desde delphi 2010, no me imprime de manera correcta incluso los renglones de texto los imprime incompletos.
Para esto estoy utilizando el siguiente codigo de prueba (delphi 2007 OK, delphi 2010 MAL):

Alguna sugerencia del motivo de la falla?



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Printers, Dialogs, StdCtrls;
  8.  
  9. type
  10.   TPrnBuffRec = record
  11.     bufflength: Word;
  12.     Buff_1: array[0..255] of Char;
  13.   end;
  14.  
  15.  
  16.   TForm1 = class(TForm)
  17.     Button1: TButton;
  18.     procedure Button1Click(Sender: TObject);
  19.   private
  20.     { Private declarations }
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. function DirectToPrinter(S: string): Boolean;
  33. var
  34.   Buff: TPrnBuffRec;
  35.   TestInt: Integer;
  36. begin
  37.   TestInt := PassThrough;
  38.   if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then
  39.   begin
  40.     StrPCopy(Buff.Buff_1, S);
  41.     Buff.bufflength := StrLen(Buff.Buff_1);
  42.     Escape(Printer.Canvas.Handle, Passthrough, 0, @buff, nil);
  43.     Result := True;
  44.   end
  45.   else
  46.     Result := False;
  47. end;
  48.  
  49. procedure PrintText(s: string);
  50. var
  51.   PTBlock: TPassThroughData;
  52. begin
  53.   PTBlock.nLen := Length(s);
  54.   StrPCopy(@PTBlock.Data, s);
  55.   Escape(Printer.Handle, PASSTHROUGH, 0, @PTBlock, nil);
  56. end;
  57.  
  58. procedure PrintOut;
  59. var
  60.   i:Integer;
  61. begin
  62.   Printer.BeginDoc;
  63.  
  64.   for i := 0 to 2 do
  65.   begin
  66.     DirectToPrinter('This text');
  67.     DirectToPrinter(#10#13);
  68.     DirectToPrinter(#27#105); //Corte de papel
  69.   end;
  70.  
  71.   Printer.EndDoc;
  72. end;
  73.  
  74. procedure TForm1.Button1Click(Sender: TObject);
  75. begin
  76.   PrintOut;
  77. end;
  78.  
  79. end.


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 22 julio 2010 - 04:44

Hola CarlosVIAC Bienvenido a DelphiAccess

Puedes consultar esta discusión en embarcadero, las cosas cambian "un poco" con este asunto de las secuencias de escape.

Salud OS
  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 julio 2010 - 04:54

La cuestión parece radicar en el uso de UNicode en D2010, puedes ensayar cambiando el tipo de parámetros de los procedimientos de String a AnsiString.

Saludos
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 julio 2010 - 04:59

prosigo ....
Ylos  tipo Char a AnsiChar.
  • 0




IP.Board spam blocked by CleanTalk.