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.