AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Regionale Einstellungen

Ein Thema von Cogito · begonnen am 9. Mai 2012 · letzter Beitrag vom 24. Mai 2012
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.819 Beiträge
 
Delphi XE3 Professional
 
#11

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 10:14
Wieso verwendet man hier auch LPSTR?
Zitat:
LPSTR = PAnsiChar;
Im MSDN (Bei Google suchenSetLocaleInfo) steht doch ausdrücklich LPCTSTR.

Oder man nimmt einfach PChar.


PS: Sowas ist übrigens einer der Gründe, warum es beim Umstieg auf Unicode (Delphi 2009 und höher) so viele Probleme gab ... schlechter/fehlerhafter Code.


[add]
Delphi-Quellcode:
procedure SetDecimalSeparator(Ch: Char);
begin
  Application.UpdateFormatSettings := True;
  if SetLocaleInfo(GetThreadLocale, LOCALE_SDECIMAL, PChar(String(Char))) then
    DecimalSeparator := Ch;
  Application.UpdateFormatSettings := False;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (16. Mai 2012 um 10:19 Uhr)
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
277 Beiträge
 
#12

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 14:07
OK, vielen Dank.
Das Problem scheint aber doch woanders zu liegen. Der User möchte nämlich im numerischen Block der Tastatur das Komma benutzen können, wenn er numerische Werte in die Applikation eingibt. Jetzt ist mir aufgefallen, dass es Unterschiede im Num-Block bezüglich der Tastenbelegung gibt. Bei deutschen Tastaturen ist dort ein Komma, bei anderen ein Punkt. Und wenn sie auf den Punkt klicken ist das natürlich nicht erlaubt in einem numerischen Feld. Hat hier jemand eine Idee? Ich könnte mir vorstellen dass es helfen könnte, sobald jemand auf den Punkt klickt dieses automatisch in ein Komma umzuwandeln, aber ich hab ehrlich gesagt keine Ahnung...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 14:27
Bei deutschen Tastaturen ist dort ein Komma, bei anderen ein Punkt
Jemand, der eine Tastatur mit US-Zeichenbelegung angeschlossen hat, wird doch wahrscheinlich auch English (USA) als Regionalsetting eingestellt haben.
Dann passt die Tastatur zur Einstellung.

Wenn es wirklich wichtig ist, dass ein deutschsprachiger User an einem Rechner mit englischer Tastatur effizient arbeiten kann, dann wäre die absolut billigste Lösung zusätzlich eine deutsche Tastatur (Kosten: 8 Euro) anzuschliesen.
Ich würde mich hier nicht auf ein Gemurkse auf Softwarebene einlassen.
Andreas
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
277 Beiträge
 
#14

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 14:55
Bei deutschen Tastaturen ist dort ein Komma, bei anderen ein Punkt
Jemand, der eine Tastatur mit US-Zeichenbelegung angeschlossen hat, wird doch wahrscheinlich auch English (USA) als Regionalsetting eingestellt haben.
Dann passt die Tastatur zur Einstellung.

Wenn es wirklich wichtig ist, dass ein deutschsprachiger User an einem Rechner mit englischer Tastatur effizient arbeiten kann, dann wäre die absolut billigste Lösung zusätzlich eine deutsche Tastatur (Kosten: 8 Euro) anzuschliesen.
Ich würde mich hier nicht auf ein Gemurkse auf Softwarebene einlassen.
Es handelt sich aber nicht um deutschsprachige User!
Diese User haben einen Punkt auf der Taste im numerischen Block und leider kein Komma wie z.B. deutsche Tastaturen. Der Sinn ist nun das sie diese Taste (wegen der schnelleren Eingabe) in dezimal-Feldern nutzen können. Ich kann denen doch nicht sagen kauft euch eine deutsche Tastatur...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
24.510 Beiträge
 
Delphi XE Professional
 
#15

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 16:34
Was Andreas meint: die Tastatur wird ja vermutlich auch zur eingestellten Windows-Sprache passen. Von daher wäre es Quatsch, dem User landesspezifische Einstellungen aufzudrängen. Wer eine englische Tastatur verwendet, benutzt ja wohl (zumindest ist davon auszugehen) auch ein englisches Windows, japanische Tastatur lässt auf japanisches Windows und klingonische Tastatur auf klingonisches Windows schließen . Das soll heißen: eigentlich sollte das in den meisten Fällen schon von sich aus funktionieren.
Detlef
Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"

Delphi programming is cool
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
35.141 Beiträge
 
Delphi 2006 Professional
 
#16

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 16:41
klingonische Tastatur auf klingonisches Windows schließen
Also Windows in der original Sprache?
Michael
"Every language has an optimization operator. In Delphi that operator is: //"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
24.510 Beiträge
 
Delphi XE Professional
 
#17

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 16:44
Jepp
Detlef
Wenn Dein Programm nicht macht, was es soll, nenn es einfach "Version 1.0"

Delphi programming is cool
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.819 Beiträge
 
Delphi XE3 Professional
 
#18

AW: Regionale Einstellungen

  Alt 16. Mai 2012, 17:12
Wenn ich ein englisches Sprachschema im Windows ausgewählt ab und passend dazu ein englisches Tastaturlayout, dann ist das dezimaltrennzeichen ein Punkt und passend dazu ist im Ziffernblock auch ein Punkt vorhanden.

Stelle ich mir das Windows auf Deutsch um und passend datu auch das Tastaturlayout, dann ist das Dezimaltrennzeichen ein Komma und auch im Ziffernblock ist ein Komma.



Wieso willst du denn unbedingt ein Komma dort haben?
Es ist vollkommen egal was dort ist, solange das Programm auch richtig darauf reagiert
und als Dezimaltrenner den verwendet, welcher im System eingestellt wurde.

Er heißt ja nicht umsonst DecimalSeparator. (im Deutschen ein Dezimalkomma und Englischen ein Dezimalpunkt)

Das Dezimaltrennzeichen im Ziffernblock hat auch absichtlich einen anderen Tastencode, als das Komma links auf unserer deutschen Tastatur,
damit Windows diese Taste passend zur aktuellen Spracheinstellung mappen kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (16. Mai 2012 um 17:16 Uhr)
  Mit Zitat antworten Zitat
Cogito

Registriert seit: 12. Jun 2008
277 Beiträge
 
#19

AW: Regionale Einstellungen

  Alt 17. Mai 2012, 07:21
Der Kunde möchte das so haben und, wie meist in solchen Fällen, mit der Anmerkung, das sie das in Vorgänger-Programmen auch so machen konnten. Ich erspare mir an dieser Stelle eine Diskussion mit Kunden über die Sinnhaftigkeit.
Mit der Prozedur "SetDecimalSeparator" hier aus diesem Thread wurde ja bereits das Dezimaltrennzeichen als Komma festgelegt und wenn ich das bisherige richtig verstanden habe wäre doch das einzige, was jetzt noch nötig wäre, die Kommataste im Num-Block IMMER als Komma zu interpretieren, jedenfalls für die Dauer der Laufzeit meines Programms. Falls das so stimmt, hat hier jemand eine Idee wie das zu bewerkstelligen ist?
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
163 Beiträge
 
Delphi 7 Enterprise
 
#20

AW: Regionale Einstellungen

  Alt 17. Mai 2012, 15:25
.... hat hier jemand eine Idee wie das zu bewerkstelligen ist?
Die windowsinterne Umsetzung des virtuellen Tastencodes (VK_SEPARATOR) der "Kommataste" auf dem Nummernblock wird durch die Ausführung der Funktion SetDecimalSeparator() nicht beeinflusst, bleibt also konstant wie vom System vorgegeben.

Wenn man also das Dezimalzeichen - aus welchem Grund auch immer - mittels SetDecimalSeparator() ändert und folglich zweckmäßigerweise die entsprechende Änderung auch durch den Druck der "Kommataste" des Nummernblocks gewährleisten will, kann man das nur durch Abfangen der geeigneten Message ermöglichen. Dies bezieht sich dann auf die gesamte Application, unabhängig von den verwendeten Komponenten zur Eingabe.
Code:
  {...}
  private
    { Private-Deklarationen }
    procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
  {...}
 
procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
  case Msg.Message of
    WM_KEYDOWN,
    WM_KEYUP:
      if (Msg.wparam = VK_DECIMAL) and (Odd(GetKeyState(VK_NUMLOCK))) then
      begin
        Msg.wparam := 190; // für Punkt
        // oder Msg.wparam := 188; // für Komma
        Msg.lparam := MakeLParam(LoWord(msg.lparam), (HiWord(Msg.lparam) and $FE00) + MapVirtualKey(Msg.wparam, 0));
      end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMessage := AppOnMessage;
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf