Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Apertura de cajón con Delphi Berlín (https://www.clubdelphi.com/foros/showthread.php?t=94831)

newtron 11-08-2020 13:21:46

Apertura de cajón con Delphi Berlín
 
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:


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

Cita:

Empezado por Ñuño Martínez (Mensaje 538276)
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


La franja horaria es GMT +2. Ahora son las 19:41:31.

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