Problem mit der Ländereinstellung

Christoph1972

Erfahrenes Mitglied
Hallo Zusammen,


ich habe ein Problem. ich habe ein Rechenprogramm mit VB.6 geschrieben, es läuft auf mehreren Rechnern und wird von verschiedenen Leuten genutzt. Ich wurde jetzt schon zwei mal herbeigerufen, da das Rechenprogramm falsche Ergebnisse lieferte. Ich habe auch schnell das Problem finden können. Irgendwer hat in der Systemsteuerung unter Ländereinstellungen, das Dezimalzeichen auf Punkt umgestellt, warum auch immer. Wenn der User dann ein Komma eingibt wird es nicht berücksichtigt und es kommt zu falschen Ergebnissen. Das darf aber nicht passieren, da die fehler einen sehr großen Schaden verursachen könnten. Was kann ich nun machen um diese Fehlerquelle auszuschließen? Kann ich das Programm so schreiben, das der User Komma und Punkt zum rechen nutzen darf? Wäre das Problem mit der Einstellung behoben wenn ich es so schreibe, das Punkte in Kommas umgewandelt werden? Geht das überhaupt?

Für Ideen und Vorschläge bin ich wie immer dankbar.


Gruß

Christoph
 
Hier kannst du nachlesen, wie man die Ländereinstellung ausliest. Es wird auch beschrieben, wie du das aktuelle Dezimal-Trennzeichen ermitteln kannst. Dann lässt du bei der Eingabe in deinem Programm nur das Dezimaltrennzeichen zu, dass auch im Windows eingestellt ist.
 
Hi,

Danke, ich werde mal mein Glück versuchen:) Unglaublich was man als "Programmierer" alles beachten muß :rolleyes:

Gruß

Christoph
 
Schieb nach oben.............

Könnte mir jemand zeigen, wie ich mit diesem Code , ein If Then Anweisung schreiben kann?
Ich möchte das bei Programmstart geprüft wird ob das Dezimalzeichen ein Komma ist, wenn nicht soll ein MsgBox mit dem Hinweis erscheinen und das Programm soll nicht starten. Dann möchte ich das dies bei jeder Berechnung erneut geprüft wird, da ja jemand die Einstellung zur Laufzeit des Programms ändern könnte. (Schön wäre es wenn ich diese Prozedur in ein Modul auslagern könnte, damit ich nicht den Code hinter jeder Berechnung hinterlegen muss. Aber dazu wäre sicher ein neuer Thread besser :) )

Gruß
Christoph
 
So zum Beispiel:
Code:
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
 
 
Private Function GetUserLocaleInfo(ByVal dwLocaleID As Long, _
ByVal dwLCType As Long) As String
 
Dim sReturn As String
Dim Result As Long
 
Result = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, _
			 Len(sReturn))
If Result Then
	sReturn = Space$(Result)
	Result = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, _
			 Len(sReturn))
	If Result Then
	 GetUserLocaleInfo = Left$(sReturn, Result - 1)
	End If
End If
End Function
 
Private Function DezTrennZeichenIstKomma() As Boolean
Const LOCALE_SMONDECIMALSEP = &H16
	DezTrennZeichenIstKomma = (GetUserLocaleInfo(GetSystemDefaultLCID, LOCALE_SMONDECIMALSEP) = ",")
End Function

Die Funktion "DezTrennZeichenIstKomma" sagt dir jetzt aus, ob das eingestellte Dezimaltrennzeichen ein Komma ist oder nicht.
Der Aufruf mit gewünschter IF-Abfrage könnte beispielsweise so lauten:
Code:
If DezTrennZeichenIstKomma Then
	MsgBox "Das Dezimaltrennzeichen ist ein Komma, alles in Ordnung."
Else
	MsgBox "Achtung, das Dezimaltrennzeichen ist kein Komma!"
End If
 
Hi Danke!

Aber da stimmt was nicht, ich bekomme immer die Meldung das alles in Ordnung ist, auch wenn der Punkt als Trennzeichen eingestellt ist.

Gruß
Christoph
 
Stimmt, das ist komisch. Vielleicht liegt es daran, dass auf der Seite vom Quellcode steht "Betriebssystem: Win9x, WinNT, Win2000, WinME", also kein WinXP. Benutzt du WinXP?

Edit:
Man könnte sich aber mit folgendem Code auch einfach an den ganzen APIs "vorbeischummeln":
Code:
Private Function DezTrennzeichenIstKomma() As Boolean
  DezTrennzeichenIstKomma = (VBA.Mid$(1.1, 2, 1) = ",")
End Function
 
Zuletzt bearbeitet:
Jetzt antworte ich nur, damit der Thread wieder bei dir fett markiert wird, damit du meine Änderung im letzten Post bemerkst ;-)
 
Zurück