Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: ulmani 23 Ledna 2010, 18:23:03

Název: Lazarus a čeština
Přispěvatel: ulmani 23 Ledna 2010, 18:23:03
Zdravím. Prosím o radu.Přešel jsem z Delphi na Lazarus.Vše OK,ale narazil jsem na nepřekonatelný problém s prcí s řetězci,které obsahují české znaky. Např.
a:='ěščřž';
edit1.text:=leftstr(a,2);
tak mi to vloží pouze první znak z řetězce -ě.
Je to dáno asi tím,že znak bez diakritiky zabírá v paměti jedno místo,zatímco znak s diakritikou dvě místa. Poradíte někdo? Díky.
Název: Re: Lazarus a čeština
Přispěvatel: mka 23 Ledna 2010, 18:54:18
Pokud to máš v Unicode, tak si musíš najít funkce na práci s multibyte řetezci. Jistě tam nějaké budou.
Název: Re: Lazarus a čeština
Přispěvatel: klasyc 25 Ledna 2010, 00:06:27
Jak píše kolega, Lazarus pracuje v Unicode. Nevím, kde bereš proměnnou a, ale pokud je v ansi, tak ji musíš péřevést do utfka. Na konverzi znakových sad jsou dvě funkce - UTF8ToAnsi a AnsiToUTF8. Názvy myslím hovoří za vše. Moc často je ale používat není potřeba, protože Lazarus jede celý na utf8. Já je použil jenom při načítání různých výstupů z API funkcí ve Windows.
Název: Re: Lazarus a čeština
Přispěvatel: ulmani 25 Ledna 2010, 10:44:50
Díky za radu, ale nějak mi to nepáli! Příklad:

var a:string

a:='abcd';
edit1.text:=leftstr(a,2);

tak se v edit zobrazí ab, ale když do a přiřadím a:='ěščř' tak mi to zobrazí poze jeden znak, a to ě.
kde dělám chybu? Přeci nemohu pokaždé testovat proměnnou neobsahuje-li znak s diakritikou?
Název: Re:Lazarus a čeština
Přispěvatel: Blaazen 21 Května 2012, 16:59:59
Sice je to už víc jak dva roky, ale třeba to někomu pomůže.

Na tohle by se hodila funkce:
function UTF8Copy(const s: string; StartCharIndex, CharCount: PtrInt): string; inline;

takže edit1.text:=UTF8Copy(a, 1, 2);

Z historických důvodů se indexuje od 1.

Na www.lazarus.freepascal.org samozřejmě může každý získat radu mnohem rychleji :D