PDA

Ver la Versión Completa : Apertura de cajón con Delphi Berlín


newtron
11-08-2020, 13:21:46
Hola a tod@s.


He pasado una aplicación de Delphi 2007 a Delphi Berlín y me encuentro con el problema de que no me funciona la apertura del cajón. El caso es que el mismo código que funciona con 2007 no funciona con Berlín y es el siguiente:



procedure TForm1.Button1Click(Sender: TObject);

function CreaLinea: String;
var
sAux: String;
begin

Result := '';

sAux := '27 112 0 20 200';
while Pos(' ', sAux) > 0 do begin

try
Result := Result + Chr(StrToInt(Copy(sAux, 1, Pos(' ', sAux)-1)));
except

end;

sAux := TrimLeft(Copy(sAux, Pos(' ', sAux)+1, Length(sAux)));

end;

try
Result := Result + Chr(StrToInt(sAux));
except

end;

end;

var
DocInfo1: TDocInfo1;
Handle: THandle;
Linea: String;
N: DWORD;
begin
if not OpenPrinter(PChar('PRP-300'), Handle, nil) then begin
ShowMessage('Error en OpenPrinter : ');
Exit;
end;

with DocInfo1 do begin
pDocName := PChar('CAJON');
pOutputFile := nil;
pDataType := 'RAW';
end;

StartDocPrinter(Handle, 1, @DocInfo1);

StartPagePrinter(Handle);

Linea := CreaLinea;
WritePrinter(Handle, PChar(Linea), Length(Linea), N);

EndPagePrinter(Handle);

EndDocPrinter(Handle);

ClosePrinter(Handle);

end;





Imagino que será algo del juego de caracteres Ansi/UTF o algo así pero la verdad es que no doy con la tecla.


Gracias y un saludo

Ñuño Martínez
11-08-2020, 13:40:47
Tiene toda la pinta de ser lo que dices.

Puedes solucionarlo usando ANSISTRING o SHORTSTRING en lugar de STRING, PANSICHAR en lugar de PCHAR y en vez de CHR usa ANSICHAR.

También deberás incluir la unidad AnsiStrings en vez SysUtils. Ojo, si es imperativo usar SysUtils entonces deberás prefijar las llamadas para evitar ambigüedades.

newtron
11-08-2020, 13:53:14
Buenas compañero.


He cambiado la declaración de la variable "linea" por AnsiString y va perfectamente.


Gracias y un saludo.

Ñuño Martínez
12-08-2020, 12:28:44
Para eso estamos. :)

Yo me estuve pegando con un problema parecido con Allegro.pas, y aprendí bastante sobre cómo gestionan las cadenas de caracteres C, Free Pascal y Delphi, así que ahora soy casi un experto. :cool:

newtron
12-08-2020, 12:58:12
Para eso estamos. :)

Yo me estuve pegando con un problema parecido con Allegro.pas, y aprendí bastante sobre cómo gestionan las cadenas de caracteres C, Free Pascal y Delphi, así que ahora soy casi un experto. :cool:


Estupendo, me encanta tener amigotes expertos. :D:D