Windows-Einstellungen auslesen



  • Kann mir jemand sagen, wie ich <<DecimalSeparator>> sowie <<ThousandSeparator>> der Windows-Systemsteuerung->Ländereinstellungen->Register Eigenschaften von Ländereinstellungen->Registerkarte Zahlen auslesen kann? 😕

    Davon habe ich nicht die geringste Ahnung (Schäm)!



  • Du hast doch schon fast alles was du brauchst. DecimalSeparator kann einfach ausgelesen und gesetzt werden. Die Hilfe für DecimalSeparator liefert die anderen Formatvariablen.



  • Das wäre die Borland-Variante. Über WinAPI geht das mit GetLocaleInfo.



  • Die Hilfe hat geholfen, wenn auch anders als gedacht.

    enum TStringFloatFormat {sffGeneral, sffExponent, sffFixed, sffNumber, sffCurrency };
    AnsiString asText = FloatToStrF(DBGrid1->Fields[DataCol]->AsFloat,sffNumber,7,2);
    

    Auch die Borland-Variante war natürlich viel zu einfach als das ich darauf gekommen wäre.
    Danke! 🙂

    Danke auch für die WinAPI.
    Aber von solchem Teufelszeug(;)) laß ich wegen vollständiger Unkenntnis lieber die Finger.



  • caspar_louis schrieb:

    enum TStringFloatFormat {sffGeneral, sffExponent, sffFixed, sffNumber, sffCurrency };
    AnsiString asText = FloatToStrF(DBGrid1->Fields[DataCol]->AsFloat,sffNumber,7,2);
    

    Wo in der Hilfe hast du das denn gefunden? Ich finde dort nichts zu den von dir benutzten Befehlen (z. B. TStringFloatFormat oder sffGeneral).
    Aber funktionieren tut es, musste ich doch mal ausprobieren.



  • Wenn Du unter Suchen <<DecimalSeparator>> eingibst, erscheint eine Auswahl.
    1. Punkt ist AnsiString::FloatToStrF, was sich schon verdächtig nach F(ormatierung) anhört. Dort mußte ich einfach reingucken.



  • Danke, die Suche hab ich noch nie beim BCB benutzt, ich hab auch noch gar nicht die Suchdatenbank erstellt. Irgendwie habe ich vor Jahren mal beschlossen, daß die Suche der Windows-Hilfe nichts taugt und sie dann einfach ignoriert.
    Normalerweise langt mir der Index zum Suchen.



  • Wozu definierts du das enum neu? Das existiert schliesslich schon. Es reicht also das hier

    AnsiString asText = FloatToStrF(DBGrid1->Fields[DataCol]->AsFloat,ffNumber,7,2);
    


  • Oder wenn Du auf Verwendung von sffNumber bestehst:

    AnsiString asText = FloatToStrF(DBGrid1->Fields[DataCol]->AsFloat,AnsiString::sffNumber,7,2);
    

    😉



  • Braunstein schrieb:

    Wozu definierts du das enum neu? Das existiert schliesslich schon. Es reicht also das hier

    AnsiString asText = FloatToStrF(DBGrid1->Fields[DataCol]->AsFloat,ffNumber,7,2);
    

    Das habe ich natürlich zuerst versucht. Da mault er mich voll, daß er <<sffNumber>> nicht kennt.
    Wenn man nun das <s> wegläßt, so wie Du, dann funktioniert das auch prächtig. 🙂

    Woher weiß ich aber, daß ich das <s> weglassen muß? Welches Teil-Wissen fehlt mir hier wieder?



  • Es ist nicht so, dass man einfach das s weglassen kann, es sind einfach 2 verschiedenen Typedefs für ein und dieselbes Sache...

    sffXXXX funktioniert nur im Namespace von AnsiString. Siehe dazu auch meinen vorigen Post.



  • Die Orginalfunktion ist in der SysUtils und verwendet TFloatFormat (ohne s). In der dstring wird sie dann nochmal neu definiert und verwendet dann TStringFloatFormat (mit s im Namespace AnsiString). Wobei hier auch nur wieder die Funktion aus der SysUtils aufgerufen wird.
    Was das Ganze soll ist mir aber etwas schleierhaft. Wahrscheinlich aus Kompatibilitätsgründen zu Pascal.


Anmelden zum Antworten