Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.352 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Xe2: Probleme mit Umwandlung von Char zu Byte

  Alt 22. Jan 2012, 19:45
Wenn du an dein LCD-Modul einen AnsiString schicken musst, kannst du logischerweise auch nicht mit String als Variablentyp arbeiten.

Für mich sieht das so aus, dass du schlicht statt Bytefummelei überall AnsiChar und statt string AnsiString nehmen muss. Natürlich kannst du auch eine lokale AnsiString Variable nehmen und da den übergebenen Wert reinlegen, damit du nach außen direkt UnicodeStrings akzeptieren kannst.

Pos würde ich nicht benutzen, da du dann wieder bei Unicode wärst. Scheue dich doch nicht eine Schleife zu benutzen wo es sinnvoll ist. Hier macht Pos nicht wirklich Sinn. Und mit AnsiChar kannst du dir auch die ganzen Casts sparen.
Delphi-Quellcode:
procedure TMainForm.LCD_Text_senden(Text: String; Zeilenumbruch: Boolean = false;
  leeren: Boolean = false; Schritt: Boolean = false; Verzoegerung: Word = 100);
const
  Chars: array[1..10] of AnsiChar = ('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß', '²', '³', 'µ');
  ReplacementChars: array[1..10] of AnsiChar = (#$84, #$94, #$81, #$8E, #$99, #$9A, #$E1, #$FD, #$FE, #$E6);
var
  i, j: Integer;
  AnsiText: AnsiString;
begin
  {...}

  AnsiText := AnsiString(Text);
  //Sonderzeichen auslesen
  for i := 1 to Length(Text) do
    for j := Low(Chars) to High(Chars) do
      if AnsiText[i] = Chars[j] then
        AnsiText[i] := ReplacementChars[j];

  {...}
end;
So ist der Code kürzer, übersichtlicher und Warnungen sollte es auch nicht mehr geben.

Nebenbei:
Deine Variablen solltest du besser ordentlich bezeichnen. Die Bezeichnung Text gibt es in Delphi z.B. schon... Besser sind eindeutige Bezeichner.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat