![]() |
WideChar aus WideString bekommen.
Hallo
wenn ich einen Widestring habe, und den WideChar an einer Position des strings auslesen möchte komm ich mit String[X] nur bei Ansi-zeichen weiter nicht aber bei Unicode. Wie kann ich sonst nen WideChar aus nem Widestring bekommen? Gruß snow |
Re: WideChar aus WideString bekommen.
Genauso (sind beides dynamische Arrays, also gleicher Zugriff)
Delphi-Quellcode:
wie machst du es denn bisher? (etwas Code)
Var S: WideString;
C: WideChar; C := S[x]; |
Re: WideChar aus WideString bekommen.
Delphi-Quellcode:
so.
procedure TForm1.Button1Click(Sender: TObject);
var chr1, chr2 : widechar; str : widestring; nr : integer; begin chr1:=Widechar(256); chr2:=Widechar(257); str:=chr1+chr2; chr1:=str[1]; nr:=ord(chr1); showmessage(inttostr(nr)); end; ich weise zuerst den widechars chr1, chr2 das zeichen 256 und 267 zu. dann klemm ich die beiden in den string und lese dann die erste stelle wieder in Chr1 dann wird mittels ord der integer herausgefunden und dann das ganze angezeigt. eigendlich sollte ich ja 256 angezeigt bekommen. aber ich bekomm 65 angezeigt. wenn ich aber
Delphi-Quellcode:
durch
str:=chr1+chr2;
Delphi-Quellcode:
ersetze dann klapts und ich bekomm 256 raus.
str:=chr1;
gruß snow edit:// ich hab den fehler gefunden aber es ist wohl eher ein Bugg.
Delphi-Quellcode:
zuerst die widechars in widestrings umwandeln dann addieren und dann wieder auslesen.
procedure TForm1.Button1Click(Sender: TObject);
var chr1, chr2 : widechar; str, str2 : widestring; nr : integer; begin chr1:=Widechar(256); chr2:=Widechar(257); str:=chr1; str2:=chr2; str:=str+str2; chr1:=str[2]; nr:=ord(chr1); showmessage(inttostr(nr)); end; merkwürdig und vor allem viel Tipp arbeit. Ich werd wohl ne procedure schreiben müssen. Gruß snow |
Re: WideChar aus WideString bekommen.
nja, mit Unicode hat Delphi halt noch so seine Probleme
du kannst aber selber direkt eine widechar<>widestring-Konvertierung vornehmen,
Delphi-Quellcode:
str := WideString(chr1) + WideString(chr2);
wobei es meißt recht, wenn du, sobald der erste Wert ein Char/WideChar ist und du es einem String uweisen willst, nur den ersten Wert umwandelst, der Rest geht meist dann von Selber, da dann Delphi schon weiß, daß es ein String ist und es zusammenfügen/anhängen und nicht zusammenrechnen soll.
Delphi-Quellcode:
str := WideString(chr1) + {irgendwas und mehr};
wie es der Compiler womöglich verstehen kann:
Delphi-Quellcode:
// der Code, also das was du denkst zu wollen
str := chr1 + chr2; // jetzt kann addiert str := String(Char(summe(chr1, chr2))); str := String(Char(Word(chr1) + word(chr2))); // oder zusammengesetzt werden // ... jenachdem wie der Compiler es interpretiert str := String(chr1) + string(chr2); |
Re: WideChar aus WideString bekommen.
ich hab mir jetz folgende functionen geschrieben.
Delphi-Quellcode:
gruß snow
function WChrtoWstr(WChar : Widechar):WideString;
begin Result:=Wchar; end; //------------------------------------------------------------------------------ function WordtoWstr(W : Word):Widestring; begin Result:=WChrtoWstr(WideChar(W)); end; |
Re: WideChar aus WideString bekommen.
WChrToWstr ist ja eine Funktion und diese wird aufgerufen (nette sprünge im Programm), wärend WideString(...) direkt im Code umgewandelt,
aber aus Verständniskompatibilität zu WordToWstr wirst du dieses vermutlich als Funktion belassen. bei WordToWstr kannst du aber zumindestens den "unnötigen" Aufruf von WChrToWstr weglassen
Delphi-Quellcode:
function WordtoWstr(W : Word):Widestring;
begin Result:=WideChar(W); end; |
Re: WideChar aus WideString bekommen.
Stimmt der ist unnötig.
Gruß snow |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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