Abhängig von der ID zeige ich den Text an. Nur im russischen bekomme ich soetwas: 'Îáúåäèíåííàÿ ëåâàÿ áîêîâàÿ ïàíåëü'. Wie schaffe ich es, dass der Text korrekt angezeigt wird?
Ab Delphi 2009ff und ohne die Ausgabesprache des ganzen PC auf russisches Layout umstellen zu müssen:
Delphi-Quellcode:
function AnsiToUTF16(
const AText: AnsiString; Codepage: DWORD):
String;
var
BufSize: Integer;
dwFlags: DWORD;
begin
result := '
';
if Length(AText) = 0
then Exit;
case CodePage
of
932: dwFlags := MB_PRECOMPOSED;
else
dwFlags := 0;
end;
BufSize := MultiByteToWideChar(CodePage, dwFlags, PAnsiChar(AText), Length(AText),
nil, 0);
SetLength(result, BufSize);
MultiByteToWideChar(CodePage, dwFlags, PANsiChar(AText), Length(AText), PWideChar(result), BufSize);
end;
// Beispiel
procedure TMainForm.Button1Click(Sender: TObject);
var zeile: AnsiString;
begin
zeile:='
Îáúåäèíåííàÿ ëåâàÿ áîêîâàÿ ïàíåëü';
// hier mit Codepage für die kyrillische Schrift:
Showmessage(format('
Ansicode: %s'#13#10'
Unicode: %s',[zeile,AnsiToUTF16(zeile, 1251)]));
end;
In älteren Delphiversionen (z.B. Delphi 7) geht die Wiedergabe der kyrillischen Unicodezeichen mit bordeigenen Mitteln nur extrem umständlich auf dem Umweg über eine eingebaute WebBrowser-Instanz und mit Hilfe einer CharConvertTable, welche auf einer programmintern konstruierten Minimalwebseite die ansicodierten Zeichen in die HTMLcodes der entsprechenden kyrillischen Zeichen konvertiert.