![]() |
Delphi7 mit nur einer Unit Unicode fähig machen
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Community,
Ihr habt mir schon oft aus der Klemme geholfen. Nun möchte ich euch auch mal was hoffentlich Nützliches liefern. Ich habe eine Unit gecodet, die eure Komponenten/Controls nur mit dem Hinzufügen meiner kleinen Unit Unicode-fähig macht. Dabei werden immer noch die "normalen" strings verstanden (Abwärtskompatibel). Dies habe ich erreicht, indem ich die Windows-Api-Funktionen auf eigene Funktionen "umgebogen" habe, die die Strings in WideChar/Unicode umwandelt und dann die entsprechenden Windows-Api-Funktionen mit der "W"(für WideChar/Unicode)-Erweiterung aufruft. Diese Unit gibt auch Chin. bzw. Kyril. Zeichen auf einen Deutschen/nicht multilingualen System wieder. Die Unit läuft soweit. Bin aber für Verbesserungsvorschläge dankbar. Die Richedit-Komponente habe ich noch nicht zum Unicode verstehen bekommen. Zur Benutzung: die unit einfach in die uses-Klausel hinzu fügen. Wenn ihr einen Widestring habt, der nun durch ein Control angezeigt werden soll, diesen einfach mit der Funktion WideStringToUtf8 zu einen string konvertieren und diesen string an das Control übergeben.
Delphi-Quellcode:
viel Spaß damitvar ss : string begin ss := WideStringToUtf8(WideString); control1.caption := ss |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Nette Idee.
Ähnliche Ansätze habe ich für 1-2 Controls auch als ich 2002 unsere Anwendung Unicode-Enabled habe. Aber ein Glück das ich mit jetzt nicht mehr mit diesem UTF8-Trick herumschlagen muss sondern direkte (Dank Elpack und 2-3 anderen Unicode-Controls) das nicht mehr benötige |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Interessant!
Für die Umwandlung von UTF8 <-> Widestring verwende ich immer die Windows API. Als Zusatzbonus kann man neben UTF8 auch ![]()
Delphi-Quellcode:
function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var InputLength, OutputLength: Integer; begin InputLength := Length(S); OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0); SetLength(Result, OutputLength); MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength); end; function WideStringToStringEx(const WS: WideString; CodePage: Word): string; var InputLength, OutputLength: Integer; begin InputLength := Length(WS); OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil); SetLength(Result, OutputLength); WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PChar(Result), OutputLength, nil, nil); end; function UTF8ToWideString(const S: string): WideString; begin Result := StringToWideStringEx(S, CP_UTF8); end; function WideStringToUTF8(const WS: WideString): string; begin Result := WideStringToStringEx(WS, CP_UTF8); end; |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Zitat:
Win9x kannte die UTF-8 "Codepage" noch nicht. |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Zitat:
MultiByteToWideChar() und WideCharToMultiByte() benötigen mindestens Windows 2000. Alles unterhalb Win 2000 würde ich heutzutage eh nicht mehr als Ziel akzeptieren. |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Zitat:
Zitat:
|
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Zitat:
|
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Liste der Anhänge anzeigen (Anzahl: 1)
Habe inzwischen noch die Windows Funktion DrawTextEx eingebunden (wird bei mir vor allem von den LMD Tools verwendet).
der Mischka Wie kann man man den originalen Beitrag (#1) wieder bearbeiten. Würde gerne die aktuellste Version immer in Beitrag #1 haben. |
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Cool, danke für die Arbeit.
|
AW: Delphi7 mit nur einer Unit Unicode fähig machen
Liste der Anhänge anzeigen (Anzahl: 1)
Und wieder ein Update ...
würde mich über Testergebnisse von D5-D7 Nutzer freuen. der Mischka |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz