Witam
Mam pytanie, czy wałkował ktoś temat obsługi WideString'ów w FPC ? Konkretnie chodzi mi o uppercase'a dla unikodu. Dodam że rzecz dzieje się pod unix'em o którym nie mam zielonego pojęcia. W każdym razie kod:
ws : WideString;
ws := widestringmanager.upperwidestringproc(ws)
owocuje: Runtime Error 215 at $...
Co jest nie tak ? Pewnie mi czegoś brakuje w instalacji fpc, ale czego ... Jakich innych funkcji użyć ? Wiem że jest jakiś moduł cwstring (choć u mnie go nie znalazłem) w każdym razie z help'a wynika że lepiej używać widestringmanager'a.
Z góry dziękuję za pomoc
Pozdrawiam
// dopisane
A jednak jest cwstring, w initialization ma SetCWideStringManager:
Procedure SetCWideStringManager;
Var
CWideStringManager : TWideStringManager;
begin
CWideStringManager:=widestringmanager;
With CWideStringManager do
begin
...
UpperWideStringProc:=@UpperWideString;
LowerWideStringProc:=@LowerWideString;
...
end;
SetWideStringManager(CWideStringManager);
end;
Więc niby OK. Wcześniej widać nie byłu widestringmanager ustawiony. Teraz nie ma wylotki ale ... nie działa ! : ( ! Nie robi mi upper'a, może coś robię źle ?
program hello;
uses cwstring;
var
st : AnsiString;
ws: WideString;
begin
ws := #261; // to jest w unicode ą
writeln(ws); // krzaczki, ale to nic
st := UTF8Encode(ws); // teraz w st powinny być dwa znaki czyli ą w UTF8 196 133
writeln(Ord(st[2])); // i faktycznie drugi to 133 - jest OK
ws := widestringmanager.upperwidestringproc(ws); // przedtem tu wylatywało
writeln(ws); // krzaczki, ale to nic, gorzej że takie same jak na początku - UPPER NIE DZIAŁA
st := UTF8Encode(ws); // teraz w st powinny być dwa znaki czyli Ą w UTF8 196 132
writeln(Ord(st[2])); // i faktycznie drugi to 133 - jest do bani, nie zrobiło UPPER'a :(((
readln;
end.