Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Lazarus a čeština  (Přečteno 4904 krát)

ulmani

  • Návštěvník
  • Příspěvků: 6
Lazarus a čeština
« kdy: 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.

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: Lazarus a čeština
« Odpověď #1 kdy: 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.

klasyc

  • Aktivní člen
  • *
  • Příspěvků: 470
Re: Lazarus a čeština
« Odpověď #2 kdy: 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.

ulmani

  • Návštěvník
  • Příspěvků: 6
Re: Lazarus a čeština
« Odpověď #3 kdy: 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?

Blaazen

  • Návštěvník
  • Příspěvků: 2
Re:Lazarus a čeština
« Odpověď #4 kdy: 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

 

Provoz zaštiťuje spolek OpenAlt.