![]() |
Funktion für leftstr / rightstr etc mit WideStrings
Für die, die nicht in D2009 gestiegen sind:
Gibt es eine Funktion irgendwo für leftstr / rightstr etc, was mit Widestrings geht ? Ich habe es nicht bei strutils, und finde auch nichts im TNT.. Mein Ziel:
Delphi-Quellcode:
var
a, b : widestring; begin a:=tntedt1.text; // 中华人民共和国 b:= leftstrw(a, 2); // 中华 <<<< nur erste 2, aber nicht 2 byte end; |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Möglicherweise funktioniert copy()
|
AW: Funktion für leftstr / rightstr etc mit WideStrings
LeftStr aus StrUtils ist String/UnicodeString, aber auch und AnsiString
Copy aus System wird gehn ... ist für Alles (AnsiString/UnicodeString/WideString) PS: den letzten Parameter kann man weglassen und schon arbeitet es genau so wie LeftStr :zwinker: RightStr: da muß man, zusammen mit Length, bei Copy selbst berechnen Es gibt noch zwei "spezielle" Units: * ![]() * ![]() Über Funktionen für String/UnicodeString werden den WideString zwar natürlich richtig behandeln (beide Unicode), aber durch das Umkopieren (Parameter:WideString>UnicodeString, Funktion aufrufen und wieder Result:UnicodeString>WideString) natürlich ein paar Nanosekündchen langsamer. (wird wohl meißtens nicht stören) |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Zitat:
Die hatte sowas wie Unicode-Strings noch nicht. Da musste man sich mit den (Ole)WideStrings herumärgern und evtl. den einen oder anderen Buck in der RTL in Kauf nehmen. |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Evtl. wirst du in der JCL fündig:
![]() Die hat die eine oder andere Unit um auch unter dem antiken Delphi 6 besseren Unicode-Support zu bekommen. Ältere Versionen vom LMD Elpack haben auch einiges für Unicode + alte Delphi-Versionen ( ![]() Hatte uns damals geholfen längere Zeit auch mit D6 halbwegs besserbrauchbare Unicode-Unterstützung zu haben. Sind aber froh mittlerweile den Umsteig auf Post-D2009 (mittlerweile 10.4) gemacht zu haben. Die IDE+VCL/RTL spart uns gegenüber D6 doch einiges an Zeit ein. Möchten das keinesfalls mehr missen. |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Ach Mist ... hatte es falsch gelesen. :oops:
Immer diese gemeinen verneinenden Texte. Dachte er ist von D6 auf neuer als 2009 umgestiegen und sucht nun Ersatz für seinen alten Code. Ja, vor 2009 gab es nur String/AnsiString (Delphi) und WideString (OLE) und auch den uralten ShortString (Pascal), der aber auch ANSI ist. (und auch nach 2009 noch ist) |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Ich weiß nicht ob der Code dort noch in Ordnung ist, aber damit hatte ich unter Delphi 6 mit Unicode gearbeitet (neben Win-Api und Zeigerspuk). Wolbrink hat den Code irgendwann verkauft, aber das ist noch die alte Freeware-Version.
![]() |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Sein Edit heißt tntedt1.
Ich gehe schwer davon aus das er die TNTs schon im Einsatz hat. |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Aber das Copy im D6 sollte doch ebenfalls den WideString behandeln? (kann's grad nicht nachsehn, aber bin mir eigentlich ganz sicher)
Delphi-Quellcode:
Intern geht das LeftStr/LeftStrW doch bestimmt eh zum Copy und macht es genauso. :angle:
b := LeftStrW(a, 2);
// wird zu b := Copy(a, 1, 2); PS: Bei String/AnsiString mit UTF-8 oder einer chinesischen Codepage drin, da müsste man z.B. mit ![]() ![]() Also mehrmals (2) aufrufen und weiterzählen, um die Anzahl für's Copy zu bestimmen, oder man benutzt stattdessen vielleicht ![]() Nja, selber z.B. mit
Delphi-Quellcode:
rumzuspielen, das Edit dann manuell zu behandeln und womöglich auch noch die MessageBehandlung vom Delphi umzubiegen, da vor D2009 bloß ANSI behandelt wurde ... da ist es mit sowas wie den
CreateWindowW('EDIT', ...)
![]() Edit ist noch leicht. Bei ComboBox, ListBox, TreeView und Co. geht der Spaß in der WinAPI ( ![]() Und andere Lösungen wie ![]() |
AW: Funktion für leftstr / rightstr etc mit WideStrings
Noch eine generelle Warnung: Es gibt in Delphi (wie auch den meisten anderen Sprachen) ohnehin keine Methode, mit der man eine bestimmte Anzahl an Zeichen kopieren kann. Copy, LeftStr, RightStr etc. kopieren eine bestimmte Anzahl an Codeeinheiten, im Falle von Wide- bzw. UnicodeString UTF-16(LE)-Codeeinheiten. Auch die Angabe der Startposition bei Copy (und dessen langsameren Äquivalent MidStr) sind Codeeinheiten. Bei bestimmten Ideogrammen, Emojis usw. ist das unintuitiv. Das von dir gepostete Beispiel enthält aber keine Zeichen, die aus mehrere Codeeinheiten bestehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 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