Autor Téma: ThousandSeparator v Linuxe  (Přečteno 2520 krát)

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
ThousandSeparator v Linuxe
« kdy: 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:


Čí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?
« Poslední změna: 08-11-2020, 09:03:15 od Slavomir »
IDE - Lazarus, Delphi
Program - RQ Money

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 445
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:ThousandSeparator v Linuxe
« Odpověď #1 kdy: 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

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #2 kdy: 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:


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.
IDE - Lazarus, Delphi
Program - RQ Money

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #3 kdy: 10-11-2020, 06:11:33 »
Našiel som na tomto diskusnom fóre podobný problém iných programátorov.
Vyskúšam večer tam navrhované riešenie:
Kód: [Vybrat]
AnsiToUTF8(Format('%n', [1234567.89]))
« Poslední změna: 10-11-2020, 06:16:08 od Slavomir »
IDE - Lazarus, Delphi
Program - RQ Money

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #4 kdy: 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).
IDE - Lazarus, Delphi
Program - RQ Money

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 445
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:ThousandSeparator v Linuxe
« Odpověď #5 kdy: 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 := ' ';

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:ThousandSeparator v Linuxe
« Odpověď #6 kdy: 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.

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #7 kdy: 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.
IDE - Lazarus, Delphi
Program - RQ Money

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #8 kdy: 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.
IDE - Lazarus, Delphi
Program - RQ Money

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 445
  • Karma: 6
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:ThousandSeparator v Linuxe
« Odpověď #9 kdy: 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í.

Offline Slavomir

  • Mladík
  • **
  • Příspěvků: 81
  • Karma: 0
    • Verze Delphi: 10.3 CE, Lazarus 2.0.10
    • RQ Money
Re:ThousandSeparator v Linuxe
« Odpověď #10 kdy: 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).

Nastavil som som v Linux Minte systém na Portugal, všetko fungovalo bez problémov. Oddeľovač tisícok je bodka - Chr(46).

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ť.


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:


Vyzerá to skôr na chybu národného nastavenia formátu čísla v LInux Minte (pre slovenskú alebo českú lokalizáciu) ...
« Poslední změna: 12-11-2020, 17:01:34 od Slavomir »
IDE - Lazarus, Delphi
Program - RQ Money