Forum Delphi.cz

FreePascal (FPC) a Lazarus => Obecné => Téma založeno: Slavomir 08-11-2020, 09:01:04

Název: ThousandSeparator v Linuxe
Přispěvatel: Slavomir 08-11-2020, 09:01:04
Ahojte,
prosím o radu (pre Lazarus na Linux Minte).

V TListView chcem zobraziť číslo väčšie ako milión. Číslo sa zobrazí korektne s výnimkou oddeľovača tisícok. Namiesto korektoného oddeľovača (medzera alebo nejaký prázdny znak) sa mi zobrazuje nasledovný štvorec:
(http://www.rqmoney.eu/img/ostatne/thousand_separator.jpg)

Číslo (v premennej Amount typu Double) zadávam príkazom:
Kód: [Vybrat]
Item.SubItems.Add(Format('%n', [Amount], DefaultFormatSettings));
Vo Windows sa oddeľovač tisícok zobrazuje korektne.
Viete mi poradiť, kde robím v LInuxe chybu?
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Jan Fiala 09-11-2020, 11:51:55
Zkontroluj, zda používáš unicode font - zda obsahuje znak, který je použit pro oddělovač tisíců.
Znak pro oddelovat tisicu mas v ThousandSeparator, přebírá se z nastavení systému
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 09-11-2020, 17:34:14
Honzo, ďakujem za tip, ale nepomohlo. Prešiel som všetky fonty, ktoré boli v Linux Mint nainštalované - všade rovnaký výsledok (nekorektné oddeľovače tisícok).
Okrem toho divného štvorca sa zobrazujú pri niektorých fontoch kosoštvorce:
(https://www.rqmoney.eu/img/ostatne/thousand_separator 2.jpg)

Nie som síce veľmi zbehlý v Linuxe, ale predpokladám, že tento obľúbený operačný systém (na báze Ubuntu) používa UTF8 fonty.
Dátum sa zobrazuje úplne korektne.
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 10-11-2020, 06:11:33
Našiel som na tomto diskusnom fóre (https://forum.lazarus.freepascal.org/index.php/topic,20163.0.html) podobný problém iných programátorov.
Vyskúšam večer tam navrhované riešenie:
Kód: [Vybrat]
AnsiToUTF8(Format('%n', [1234567.89]))
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 10-11-2020, 17:08:10
Tak ani prevod ANSI do UTF8 nepomohol. Oddeľovač tisícok sa stále zobrazuje nekorektne.  :(
Vyskúšam to ešte na inom Linuxe (skúsim SUSE leap (https://software.opensuse.org/distributions/leap)).
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Jan Fiala 10-11-2020, 20:01:39
Datum se zobrazuje korektně, protože je tam standardní tečka, kterou umí každý font.
Jako ThousandSeparator je použit nějaký speciální znak z horní části tabulky.
Zkus před tím převodem (klidně můžeš pro zkoušku někde v Create hlavniho formu) nastavit obyčejnou mezeru:
DefaultFormatSettings.ThousandSeparator := ' ';
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: pf1957 10-11-2020, 20:17:40
Zkus před tím převodem (klidně můžeš pro zkoušku někde v Create hlavniho formu) nastavit obyčejnou mezeru:
DefaultFormatSettings.ThousandSeparator := ' ';
A nebo si nechat vypsat hexa dump toho, co tam mas, protoze FFFD je nahyradni znak za neco, co nema obraz v unicode.
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 10-11-2020, 20:28:02
Zkus před tím převodem (klidně můžeš pro zkoušku někde v Create hlavniho formu) nastavit obyčejnou mezeru:
DefaultFormatSettings.ThousandSeparator := ' ';
Honzo, ďakujem za tip. Ja ale viem prestaviť ThousandSeparator natvrdo spôsobom, ako uvádzaš.
Ak však program bude používať zahraničný užívateľ, ktorý je zvyknutý na iný oddeľovač ako my v strednej Európe, tak ho to zmýli. Preto som chcel použiť prednastavený ThousandSeparator priamo zo systému (Windows alebo Linux) - taký, ako má nastavený užívateľ (podľa svojho regiónu). Nastavenie oddeľovača tisícok natvrdo by bol až krajný variant.
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 10-11-2020, 20:30:55
A nebo si nechat vypsat hexa dump toho, co tam mas, protoze FFFD je nahyradni znak za neco, co nema obraz v unicode.
Vyskúšam, vďaka za tip.
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Jan Fiala 11-11-2020, 15:53:03
Honzo, ďakujem za tip. Ja ale viem prestaviť ThousandSeparator natvrdo spôsobom, ako uvádzaš.
Ak však program bude používať zahraničný užívateľ, ktorý je zvyknutý na iný oddeľovač ako my v strednej Európe, tak ho to zmýli. Preto som chcel použiť prednastavený ThousandSeparator priamo zo systému (Windows alebo Linux) - taký, ako má nastavený užívateľ (podľa svojho regiónu). Nastavenie oddeľovača tisícok natvrdo by bol až krajný variant.

Myslel jsem na zkoušku, aby se potvrdilo, že tam původně máš znak, který font nezná, takže místo znaku se ti vypíše náhradní.
Název: Re:ThousandSeparator v Linuxe
Přispěvatel: Slavomir 12-11-2020, 16:59:29
Skúšal som viacero možností:
Nastavil som som v Linux Minte systém na US, všetko fungovalo bez problémov. Oddeľovač tisícok je čiarka - Chr(44).
(https://www.rqmoney.eu/img/ostatne/thousand_separator_us.jpg)
Nastavil som som v Linux Minte systém na Portugal, všetko fungovalo bez problémov. Oddeľovač tisícok je bodka - Chr(46).
(https://www.rqmoney.eu/img/ostatne/thousand_separator_pt.jpg)
Nastavil som som v Linux Minte systém na Slovenský či Český, problém pretrvával. Oddeľovač tisícok je akýsi znak - Chr(226), ktorý sa pomocou Showmessage nedá ani zobraziť.
(https://www.rqmoney.eu/img/ostatne/thousand_separator.jpg)

Až keď som natvrdo zamenil Chr(226) za obyčajnú medzeru pomocou kódu
Kód: [Vybrat]
If Ord(DefaultFormatSettings.ThousandSeparator) = 226 then DefaultFormatSettings.ThousandSeparator := ' '; // medzeravýsledné číslo vyzeralo normálne:
(https://www.rqmoney.eu/img/ostatne/thousand_separator_sk.jpg)

Vyzerá to skôr na chybu národného nastavenia formátu čísla v LInux Minte (pre slovenskú alebo českú lokalizáciu) ...