![]() |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
|
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zitat:
|
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zitat:
Delphi ist ja soweit gegangen, dass es die Funktion "GetModuleFileName" implementiert und gleich auf GetModuleFileNameW umleitet. Schau mal in die Unit Windows! Mit allen weiteren Funktionen verhält es sich ähnlich. Wenn man String plötzlich als WideString und die Funktionen der WinAPI anders lenkt ist schon ein großer Teil geschafft (zumindest für Windows-like-UniCode). Aber der Teufel steckt sicher auch da noch in diversen Detaild. Dass der ausgetrieben wird, dafür bezahlen wir ja schließlich auch Borland...äh...CodeGear...äh...Emdingsdabums |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Ich habe eben mal nachgesehen - und es ist (wie erwartet) wirklich so, dass GetCommandLine (und dieser Funktion bedient sich ParamStr()) per Standard auf die Unicode-Variante zugreift. Du hast darüber hinaus noch die Möglichkeit, explizit auf die Ansi-Variante zuzugreifen, sofern Dir dies ein Bedürfnis ist.
Delphi-Quellcode:
Um dem Protokoll Genüge zu tun: Ich bin von CodeGear autorisiert, diese Beta-Informationen zu veröffentlichen aber auch verpflichtet, diesen Nachsatz stets zu erwähnen.
[...]
{Auszug aus der System.poas von Tiburón} function GetCommandLineA: PAnsiChar; stdcall; external kernel name 'GetCommandLineA'; function GetCommandLineW: PWideChar; stdcall; external kernel name 'GetCommandLineW'; {$IFNDEF UNICODE} function GetCommandLine: PAnsiChar; stdcall; external kernel name 'GetCommandLineA'; {$ELSE} function GetCommandLine: PWideChar; stdcall; external kernel name 'GetCommandLineW'; {$ENDIF} [...] |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zitat:
Zitat:
Zu meinem Fall: Meine Datei würde über ParamStr (API +W) oder OpenDialog (Ext.VCL) reinkommen. Anschließend in einem Label (Ext.VCL) dargestellt. Danach per Indy per POST an einer Webseite gesendet. Indy scheint WideStrings soweit ich das sehe bei MultiPartData-AddFile() zu akzeptieren (aber Source ist nicht bei Turbo-Delphi dabei). Jetzt müsste ich mich um die externen VCLs OpenDialog und Label kümmern. |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zitat:
Eigentlich müßt ja viel mit PChar dortstehen und je nach Compilerschalter is PChar = PAnsiChar bzw. PChar = PWideChar. |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zitat:
In Delphi 2009 ist PChar = PWideChar. Da führt kein Weg dran vorbei. Wenn Du den "alten" Char möchtest, bei dem noch 1 Zeichen = 1 Byte war, dann musst Du explizit PAnsiChar verwenden. Analog gilt Gleiches für Strings. In sich ist das System also weiterhin stimmig und deswegen ging das mit der Portierung auf weiten Strecken auch recht flott. Man biegt den API-Aufruf auf die "W"-Variante um und - wenigstens in diesem Fall - am Ziel. Dieses Prinzip funktioniert auf weiten Strecken der Portierung, bis genau zu der Stelle, an der man nicht sauber mit SizeOf() und Konsorten gearbeitet hat, sondern den String in seine Bytes zu zerlegen versucht. |
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Vor der Übernahme durch TMS standen die TNT Unicode Controls unter der LGPL. Diese etwas älteren Versionen findet man immer noch auf diversen Seiten unter eben dieser Lizenz. Die aktuellsten Versionen muss man dann bei TMS kaufen, wenn man sie braucht.
|
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Zumindest sind die JEDI Projekte JVCL, JCL (größte Teile), API und WSCL für die neue Version gerüstet.
|
Re: Ist wahres Unicode mit Delphi überhaupt möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Noch mal kurz zur Demonstration:
Ich habe mein Vista mal auf Japanisch umgestellt. Das hat beispielsweise im Dateisystem die für Vista typische Lokalisierung einiger Ordner zur Folge. Wenn man nun mit den üblichen API-Funktionen diese Namen ermitteln will, nimmt man einfach seinen alten Code. Dadurch, dass die korrekte API-Funktion aufgerufen wird und sowohl Char als auch String unicode-fähig sind, hat man wieder ein in sich konsistentes System:
Delphi-Quellcode:
Ergebnis mit den Standard-Komponenten siehe Anhang.
(* Der Code ist nicht hübsch, aber er tut. *)
procedure TForm1.Button1Click(Sender: TObject); var root : string; sRec : TSearchRec; fint : integer; fInfo : TSHFileInfo; begin root:= 'c:\'; fint:= FindFirst( root+'*.*', faAnyFile, sRec ); while fint = 0 do begin SHGetFileInfo( PChar(root + srec.name), 0, fInfo, SizeOf(fInfo), SHGFI_DISPLAYNAME OR SHGFI_TYPENAME ); Memo1.lines.add( fInfo.szDisplayName + ' (' +fInfo.szTypeName+')' ); fint:= FindNext( sRec ); end; FindClose( sRec ); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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-2025 by Thomas Breitkreuz