Hallöchen sehr geehrte Lazarus-Community,
ich versuche schon seit einigen Tagen Zeichen mit mehr als einem Byte in einen Char zu speichern. Da Char nur 1 Byte hat, habe ich es mit WideChar probiert, welches ja 2 Byte hat. Leider klappt auch das nicht. Ich habe mich mit der ganzen Codierung mal auseinander gesetzt, doch gebracht hat es nichts.
Folgende Zuweisung wurde schon oft geschrieben, aber nie konnte ich eine Lösung dafür finden:
Code: Alles auswählen
var
c: Char;
begin
c := 'ä'; // Fehler, weil ä als String behandelt wird
end;
Dieses Beispiel zeigt auch nicht das gewünschte an:
Code: Alles auswählen
var
c: Char;
s: String;
begin
s := 'ä';
c := s[1];
ShowMessage(c); // Gibt leere Meldung aus
end;
Damit klappt es, hilft mir aber nicht, da damit kein Char zurückgegeben wird:
Code: Alles auswählen
var
s1, s2: String;
begin
s1 := 'ä';
s2 := s1[1] + s1[2];
ShowMessage(s2); // Gibt ä aus
end;
Wenn eine Funktion ein Char als Parameter erwartet, kann kein Multibyte-Zeichen übergeben werden. Es sind nur ASCII-Zeichen möglich, aber keine ANSI-Zeichen, jedenfalls keine > 128.
VkKeyScan (aus Windows-Unit:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx) benötigt als Parameter einen Char. Aus einem String durch Indexierung der einzelnen Zeichen ist es nicht möglich, Multibyte-Zeichen auszulesen (siehe oben). Ich habe auch schon von der Unit
LazUTF8 gehört und auch Funktionen, wie
UTF8Copy oder
UTF8Length genutzt, nur bringen die mir nichts. Gibt es denn irgendeine Möglichkeit? Ich bin über jede Hilfe dankbar!