Search code examples
delphidelphi-xe7zebra-printers

CharPrinter in ZEBRA Printer XE7


I used the CharPrinter.pas unit to send commands in ZPLII for a ZEBRA printer in Delphi RAD2007 and everything worked well, but I change to XE7 and tried to use the same functions and sending to the printer and does not work, and does not give any error message. Does it have to do the new data type versions XE ?


Solution

  • This happened cause Delphi switched to Unicode strings in Delphi 2009. Unicode strings use 2 bytes for every char. Older Delphi versions used 1 byte for every char.

    So you must make some changes in ChatPrinter.pas.

    Try to edit this (not tested):

    procedure   TCharPrinter.SendData (aData : String);
    var
     Data : array[0..255] of char;
     cnt  : integer;
     ss : TStringStream;
    begin
    
     try
       ss := TStringStream.Create(aData,TEncoding.ANSI);
    
       fStream.CopyFrom (ss,0);
     finally
       ss.Free;
     end;
      // for cnt := 0 to length(aData) - 1
      // do Data[cnt] := aData[cnt+1];
    
    end;
    

    Or simpler:

    procedure   TCharPrinter.SendData (aData : String);
    var
     Data : AnsiString;
    begin
     Data := AnsiString(aData);
     fStream.Write(PAnsiChar(Data)^, Length(Data));
    end;