Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Regionale Einstellungen (https://www.delphipraxis.net/168191-regionale-einstellungen.html)

Cogito 9. Mai 2012 13:35

Regionale Einstellungen
 
Hallo zusammen,

in verwende in meinem Programm ein datagrid, bei welchem eines der Felder auf einem decimal field in SQL Server 2008 basiert. Auf manchen Rechnern kann man ein Komma als dezimal trenner verwenden, auf manchen aber auch nicht. Ich dachte bisher immer das würde einzig von den Region-Einstellungen unter Windows abhängen, aber mein Kollege hier hat z.B. auch ein Komma als Trenner eingestellt, kann dies aber nicht in Dezimalfeldern verwenden. Es geht darum, das Kunden gerne immer ein Komma verwenden möchten, weil dies im numerischen Block der Tastatur verfügbar ist und die Eingabe von Dezimalzahlen dadurch sehr viel schneller vonstatten gehen kann. Kann mir jemand sagen, ob und wie ich in Delphi veranlassen kann, das grundsätzlich immer das Komma als Dezimaltrennzeichen verwendet wird?

ASM 9. Mai 2012 15:15

AW: Regionale Einstellungen
 
Zitat:

Zitat von Cogito (Beitrag 1165592)
Kann mir jemand sagen, ob und wie ich in Delphi veranlassen kann, das grundsätzlich immer das Komma als Dezimaltrennzeichen verwendet wird?

Hiermit sollte es vermutlich gehen:
Code:
procedure SetDecimalSeparator(Ch: Char);
var
  DefLCID: LCID;
  Buffer: LPSTR;
begin
  Application.UpdateFormatSettings := True;
  StrPCopy(Buffer, Ch);
  DefLCID := GetThreadLocale;
  if SetLocaleInfo(DefLCID, LOCALE_SDECIMAL, Buffer) then
    DecimalSeparator := StrPas(Buffer)[1];
  Application.UpdateFormatSettings := False;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  SetDecimalSeparator(',');
end;

khh 9. Mai 2012 15:55

AW: Regionale Einstellungen
 
schade, hätte ich auch gebrauchen können, aber Lazarus kennt:


Application.UpdateFormatSettings

ledier nicht :-(

DeddyH 9. Mai 2012 16:06

AW: Regionale Einstellungen
 
Kennt Lazarus denn die globale Variable Decimalseparator aus SysUtils?

khh 9. Mai 2012 16:14

AW: Regionale Einstellungen
 
ja, die kennt Lazarus

jaenicke 9. Mai 2012 16:17

AW: Regionale Einstellungen
 
Solange Lazarus die Einstellungen nicht zwischendrin wiederherstellt kannst du das auch weglassen. Bei Delphi dient das dazu, dass die gesetzten Einstellungen auch bei einer Aktualisierung beibehalten werden.

shmia 9. Mai 2012 16:27

AW: Regionale Einstellungen
 
Zitat:

Zitat von Cogito (Beitrag 1165592)
... Ich dachte bisher immer das würde einzig von den Region-Einstellungen unter Windows abhängen

Das tut es auch.
Es sei denn es handelt sich um Window Vista oder Windows 7.
Dann kann es passieren, dass Delphi-Programme alle regionalen Einstellungen als English(USA) auslesen, obwohl in der Systemsteuerung Deutsch(Deutschland) eingestellt ist.

Dann muss man auf Englisch umschalten, abspeichern und wieder auf Deutsch umschalten und abspeichern. (Natürlich für jeden Windows User)

himitsu 9. Mai 2012 16:44

AW: Regionale Einstellungen
 
Zitat:

Zitat von shmia (Beitrag 1165642)
Dann kann es passieren, dass Delphi-Programme alle regionalen Einstellungen als English(USA) auslesen, obwohl in der Systemsteuerung Deutsch(Deutschland) eingestellt ist.

Da es nicht richtig (nur teilweise) auf Deutsch eingestellt ist und der Teil vergessen wurde zu ändern, wo Delphi seine Informationen herbekommt.

bernhard_LA 9. Mai 2012 17:59

AW: Regionale Einstellungen
 
ist doch ein bekannter Windows Bug, verfügbar in XP Vista und WIN 7 :

um den richtig Ländercode auslesen zu können zuerst die Sprache in der Systemsteuerung von Deutsch auf Isländisch (oder ...) stellen speichern und dann von Isländisch zurück auf Deutsch. Dann kann man auch Deutsch mit den Ländereinstellungen auslesen.

Cogito 16. Mai 2012 11:03

AW: Regionale Einstellungen
 
Zitat:

Zitat von ASM (Beitrag 1165613)
Zitat:

Zitat von Cogito (Beitrag 1165592)
Kann mir jemand sagen, ob und wie ich in Delphi veranlassen kann, das grundsätzlich immer das Komma als Dezimaltrennzeichen verwendet wird?

Hiermit sollte es vermutlich gehen:
Code:
procedure SetDecimalSeparator(Ch: Char);
var
  DefLCID: LCID;
  Buffer: LPSTR;
begin
  Application.UpdateFormatSettings := True;
  StrPCopy(Buffer, Ch);
  DefLCID := GetThreadLocale;
  if SetLocaleInfo(DefLCID, LOCALE_SDECIMAL, Buffer) then
    DecimalSeparator := StrPas(Buffer)[1];
  Application.UpdateFormatSettings := False;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  SetDecimalSeparator(',');
end;

Dieser Code funktioniert bei mir nicht.
In der Zeile
Code:
if SetLocaleInfo(DefLCID, LOCALE_SDECIMAL, Buffer) then
meldet mir der Compiler einen Fehler: Inkompatible Typen 'AnsiChar' und 'Char'

Kannst du deine Funktion mal testen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz