![]() |
Delphi-Version: 5
Wie konstanter String auf unicode casten?
Hallo, nach etlichen Jahren TurboDelphi habe ich mir jüngst mal ein neues Delphi10.3 zugelegt
...und muss mich jetzt beim Übertragen älterer Progs natürlich auch mit diesem Unicode-Stuff herumschlagen, der inzwischen wohl eine ziemlich sperrige aufgeblähte Sache geworden zu sein scheint. Wie auch immer. Wenn ich mir früher String-Ergebnisse von Api-Funktionen ausgeben ließ, habe ich dafür oft shortStrings[255] benutzt. Das geht jetzt natürlich auch noch, nur dass das Format des dort abgelegten Strings jetzt unicode ist und man das nicht mehr so ohne weiteres mittels der Pos-Funktion und einer gegebenen SubString-Konstanten weiterverarbeiten kann. Beispiel:
Delphi-Quellcode:
klappt jetzt nicht mehr, weil die Stringkonstante 'unwichtig' nicht im gleichen Format zu aWinText vorliegt. Während z.B. die Funktion compareStr diesen Formatunterschied noch automatisch regelt, scheint das die Pos-Funktion aber leider nicht zu tun. Frage also: Gibt es event. irgendein elegantes Typcasting (oder eine String-Funktion deren Result vom Typ unicode ist) mittels dem ich so eine Stringkonstante (wie 'unwichtig') einfach mal schnell das richtige unicode-Format verpassen/überstülpen kann ...und schon funktionierte auch die Pos-Funktion wieder. Also sowas wie
var aWinText : String[255];
Info1 : string; begin GetWindowText(WindowAbcHandle, @aWinText[1],255); Info1 := copy(aWinText,1,Pos('unwichtig',aWinText)-1); ...
Delphi-Quellcode:
Info1 := copy(aWinText,1,Pos(unicode('unwichtig'),aWinText)-1);
Eine andere Möglichkeit wäre event. auch anstelle von shortString[255] ein „array[1..1024] of Char“ als Zielablage der Api-Funktion zu nehmen. Da kommt dann das Ergebnis in quasi einfachen Chars an. Nötig danach allerdings: Eine einfache Möglichkeit per event. PChar o.ä. diese einfache Zeichenfolge dann wieder in den unicodeString „aWinText“ reinzubekommen ..um dann gemäß des bisherigen Codes ganz normal damit weiterarbeiten zu können. Warum klappt das nicht (weil per direkter Zuweisung ala aWinText:='abc' klappt das ja auch!)? Gibt es da event. eine einfache Methode für, die mir bisher nur noch nicht eingefallen ist. Thx im Voraus ... |
AW: Wie konstanter String auf unicode casten?
Du bist schon so weit, dass du jetzt alles auf Unicode umstellst. Das ist gut.
Aber Zitat:
Zitat:
Delphi-Quellcode:
?
string
Du bist viel zu ressourcen-orientiert meiner Meinung nach. |
AW: Wie konstanter String auf unicode casten?
Aus dem Hut:
Delphi-Quellcode:
Solange man nicht explizit Ansi und Unicode mischt, sind die meisten Win32-API-Aufrufe eigentlich kompatibel.
const
MYMAXLEN = 255; var aWinText : String; Info1 : string; begin SetLength(aWinText, MYMAXLEN); GetWindowText(WindowAbcHandle, PChar(aWinText), MYMAXLEN); Info1 := copy(aWinText,1,Pos('unwichtig',aWinText)-1); ... |
AW: Wie konstanter String auf unicode casten?
Zitat:
|
AW: Wie konstanter String auf unicode casten?
Besten Dank allen, "string" mit SetLength davor und dann auf PChar typcasten war die Lösung.
|
AW: Wie konstanter String auf unicode casten?
Wird bei string[n], AnsiString[n] und ShortString[n] eigentlich die Längenangabe beachtet oder sind das alles Aliase für den ganz normalen ShortString?
Es ist schon lustig, dass ab Delphi 2009 string[n] Ansi ist und string Unicode. |
AW: Wie konstanter String auf unicode casten?
Zitat:
Zitat:
|
AW: Wie konstanter String auf unicode casten?
Zitat:
![]() Da gibtes diverse Whitepapers zum Thema Unicode, die du dir unbedingt mal reinziehen solltest. Die Umstellung ist mit dem nötigen KnowHow dann um ein vielfaches einfacher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 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