Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi7 mit nur einer Unit Unicode fähig machen (https://www.delphipraxis.net/175267-delphi7-mit-nur-einer-unit-unicode-faehig-machen.html)

derMischka 10. Jun 2013 13:26

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:
 
var ss : string                                      
begin
  ss := WideStringToUtf8(WideString);              
   control1.caption := ss
viel Spaß damit

Bernhard Geyer 10. Jun 2013 13:36

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

sx2008 10. Jun 2013 15:07

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 andere Codepages als Ziel oder Quelle angeben.
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;

Bernhard Geyer 10. Jun 2013 15:31

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von sx2008 (Beitrag 1218052)
Für die Umwandlung von UTF8 <-> Widestring verwende ich immer die Windows API.
Als Zusatzbonus kann man neben UTF8 auch andere Codepages als Ziel oder Quelle angeben

Geht aber erst in den "letzten" Windows-Versionen.
Win9x kannte die UTF-8 "Codepage" noch nicht.

sx2008 10. Jun 2013 18:20

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1218054)
Win9x kannte die UTF-8 "Codepage" noch nicht.

Das erste Window mit ernstzunehmendem Unicode-Support war Windows NT 4.
MultiByteToWideChar() und WideCharToMultiByte() benötigen mindestens Windows 2000.
Alles unterhalb Win 2000 würde ich heutzutage eh nicht mehr als Ziel akzeptieren.

Bernhard Geyer 10. Jun 2013 20:49

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von sx2008 (Beitrag 1218080)
Das erste Window mit ernstzunehmendem Unicode-Support war Windows NT 4.

Wir habens auch mit Win9x hin bekommen (gab ca. 10 APIs die Unicode konnten. Hat gereicht um die GUI komplett Unicodefähig zu haben :-)

Zitat:

Zitat von sx2008 (Beitrag 1218080)
Alles unterhalb Win 2000 würde ich heutzutage eh nicht mehr als Ziel akzeptieren.

Ist bei uns auch so W2K ist zwar noch supportet, fliegt aber bald raus.

jaenicke 10. Jun 2013 21:19

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1218116)
Ist bei uns auch so W2K ist zwar noch supportet, fliegt aber bald raus.

Bei uns ist es schon rausgeflogen. Unter XP gibt es in der Regel keinen Support mehr.

derMischka 12. Jun 2013 12:04

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.

lbccaleb 12. Jun 2013 12:44

AW: Delphi7 mit nur einer Unit Unicode fähig machen
 
Cool, danke für die Arbeit.

derMischka 13. Jun 2013 17:20

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 14:46 Uhr.
Seite 1 von 7  1 23     Letzte » 

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz