Hallo,
ich kämpf gerade mit dem Portieren eines in Delphi7-geschriebenen Projektes in Delphi XE2.
Darin beschreib ich ein LCD-Modul.
Blöderweise kann ich Texte nicht 1:1 an das Modul senden, da einige Sonderzeichen einen anderen Hexwert haben.
Dazu hab ich mir damals folgendes Konstrukt gebaut:
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 Char = ('ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß', '²', '³', 'µ');
Bytes: array[1..10] of Byte = ($84, $94, $81, $8E, $99, $9A, $E1, $FD, $FE, $E6);
var
i : Integer;
Pos_char : Integer;
begin
{...}
//Sonderzeichen auslesen
for i := 1 to length(Text) do
begin
//prüfen ob Char im Array "Chars" ist
Pos_Char := Pos((Text[i]), Chars);
//Sonderzeichen vorhanden? - dann durch Byte-Wert ersetzen
If Pos_Char > 0 then
Text[i] := Chr(Bytes[Pos_Char]);
end;
{...}
end;
Unter Delphi7 hats bestens funktioniert. Unter XE2 leider nein, da die ersetzten Werte z. B. bei "ä" nicht mehr $84, sondern $0084 und damit hat das LCD-Modul Probleme.
Nun könnt ich aus
Text: String
einfach
Text: AnsiString
machen.
Aber wie müsst es denn mit String gemacht werden? (falls das überhaupt mit String geht)
Dummerweise bekomm ich dann bei anderen Codezeilen (z. b. wo Insert verwendet wird) dann Warnungen (z. B. [DCC Warnung] Unit1.pas(208): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString').
Ich würd halt gerne das Ganze auf
Text: String
lassen.