Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Gültigkeitsbereich des Decimalseparator (https://www.delphipraxis.net/65994-gueltigkeitsbereich-des-decimalseparator.html)

winx 23. Mär 2006 09:59


Gültigkeitsbereich des Decimalseparator
 
Hallo,

wenn ich in einer Funktion meines Programmes
den Decimalseparator setze, gilt er dann
Windowsweit, programmweit oder nur in dieser
funktion???

Danke,
winx

Sharky 23. Mär 2006 10:05

Re: Gültigkeitsbereich des Decimalseparator
 
Hai winx,
meines wissens gilt er in deinem Programm da Delphi ja nicht bei jedem Funktionsaufruf der diese Variable auswertet sich die Daten neu von Windows holt sondern nur einmal beim Programm start.

Wenn dein Programm also nicht mit threads oder Timern usw. arbeitet gilt die Änderung "nur" in deiner Funktion. Du musst aber natürlich am ende der Funktion den Dec-Seperator wieder auf den ursprungswert setzen.

himitsu 23. Mär 2006 10:54

Re: Gültigkeitsbereich des Decimalseparator
 
Zitat:

Zitat von Sharky
Du musst aber natürlich am ende der Funktion den Dec-Seperator wieder auf den ursprungswert setzen.

Also kurz gesagt, der gilt Programmweit ... die Variable für den Decimalseparator wird beim Programmstart von Windows erfragt und da es sich wirklich nur um eine Variable handelt, wird beim Ändern dieser nicht der Wert in der Windows-Registry verändert.

Turbo78 21. Nov 2010 10:59

Re: Gültigkeitsbereich des Decimalseparators
 
Zitat:

Zitat von himitsu (Beitrag 443687)
Also kurz gesagt, der gilt Programmweit ... die Variable für den Decimalseparator wird beim Programmstart von Windows erfragt und da es sich wirklich nur um eine Variable handelt, wird beim Ändern dieser nicht der Wert in der Windows-Registry verändert.

Mein Delphi-Programm arbeitet mit zwei anderen Programmen zusammen. Ein davon ist Fortran 5 DOS und das andere VB. Also, das DOS Programm arbeitet mit dem DecimalSeparator '.' (und TausendSeparator ','). Ich habe gelernt, das die entsprechenden Variablen in Delphi nur zur Laufzeit gültig sind, sodass ich bei der Datenaufbereitung für das DOS-Programm die Variablen dem entsprechend setze.
Das Problem macht aber das VB-Programm (es arbeitet ebenfalls mit dem DOS-Programm zusammen), welches die beiden Separatoren fest in Windows verändert.
Da mich diese feste Umstellung stört, möchte ich sie im Programm zurücksetzen.
Die Frage: Kann man und wie in einem Delphi-Programm diese beiden Variablen (eigentlich die "Regionale Einstellungen") fest verändern? Falls dies in Delphi nicht gehen sollte, kann mir jemand den Tipp geben, wie man dies in VB macht (das VB Programm macht dies nämlich!).

himitsu 21. Nov 2010 11:10

AW: Gültigkeitsbereich des Decimalseparator
 
Natürlich kannst du bei Programmstart diese beiden Variablen immer ändern, so daß sie deinen Wünschen entsprechen.

Achtung: Wenn in Windows dieses systemweit geändert wird, dann wird meistens eine Änderungsmeldung an alle Programme geschickt und Delphi reagiert darauf (zumindestens "aktuellere" Delphi-Versionen) und läd dann die neuen Werte in die Variablen rein.
> du müßtest also auch darauf reagieren und Dieses in deinem Programm erneut überschreiben.

PS: Bei einigen Funktionen kannst du auch direkt einen TFormatSettings-Record mitgeben.
Dessen Einstellungen werden dann immer genutzt, egal was in diesen globalen Variablen drinsteht.

toms 21. Nov 2010 11:10

AW: Gültigkeitsbereich des Decimalseparator
 
Hallo,

Das Programm verwendet wahrscheinlich SetLocaleInfo + LOCALE_SDECIMAL um das Dezimaltrennzeichen zu ändern.

Bummi 21. Nov 2010 11:14

AW: Gültigkeitsbereich des Decimalseparator
 
IMHO sollte man Fehler nicht Fehlern korrigieren, eine Veränderung der Windowseinstellungen halte ich für nicht sinnvoll, kannst das VB-Programm anpassen?

Turbo78 21. Nov 2010 11:26

AW: Gültigkeitsbereich des Decimalseparator
 
Zitat:

Zitat von Bummi (Beitrag 1063007)
IMHO sollte man Fehler nicht Fehlern korrigieren, eine Veränderung der Windowseinstellungen halte ich für nicht sinnvoll, kannst das VB-Programm anpassen?

Kann ich leider nicht, da das Programm nicht mir gehört.
Also, ich bin auch der Meinung, dass das VB-Programm einen Fehler macht, aber kann nichts dagegen tun als entweder im Windows die Regionale Einstellungen wieder zu ändern (mühsam und manuell!), oder ,wass mir viel lieber wäre, dies per Programm zu tun.

Deshalb nochmals: Wie mache ich dies in einem Delphi-Programm, oder, wenn dies nicht geht, wie macht man dies in einem VB-Programm?
Da ich von VB wenig Ahnung habe, so wäre hier das Code sehr hilfsreich, eine DLL noch besser.
Danke, Toni

Turbo78 21. Nov 2010 17:10

AW: Gültigkeitsbereich des Decimalseparator
 
Zitat:

Zitat von toms (Beitrag 1063006)
Hallo,

Das Programm verwendet wahrscheinlich SetLocaleInfo + LOCALE_SDECIMAL um das Dezimaltrennzeichen zu ändern.

Hallo Thomas,

ist SetLocaleInfo + LOCALE_SDECIMAL in einer DLL zu finden, oder Etwas aus VB?
Gibt es auch was vergleichbares für TausendSeparator?

Danke, Toni


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.

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