Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

himitsu 16. Mai 2012 10:14

AW: Regionale Einstellungen
 
Wieso verwendet man hier auch LPSTR? :wall:
Zitat:

Delphi-Quellcode:
LPSTR = PAnsiChar;

Im MSDN (Bei Google suchenSetLocaleInfo) steht doch ausdrücklich LPCTSTR. :!:

Oder man nimmt einfach PChar. :roll:


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;

Cogito 16. Mai 2012 14:07

AW: Regionale Einstellungen
 
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...

shmia 16. Mai 2012 14:27

AW: Regionale Einstellungen
 
Zitat:

Zitat von Cogito (Beitrag 1166805)
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.

Cogito 16. Mai 2012 14:55

AW: Regionale Einstellungen
 
Zitat:

Zitat von shmia (Beitrag 1166808)
Zitat:

Zitat von Cogito (Beitrag 1166805)
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...:roll:

DeddyH 16. Mai 2012 16:34

AW: Regionale Einstellungen
 
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 :mrgreen:. Das soll heißen: eigentlich sollte das in den meisten Fällen schon von sich aus funktionieren.

Luckie 16. Mai 2012 16:41

AW: Regionale Einstellungen
 
Zitat:

Zitat von DeddyH (Beitrag 1166825)
klingonische Tastatur auf klingonisches Windows schließen

Also Windows in der original Sprache?

DeddyH 16. Mai 2012 16:44

AW: Regionale Einstellungen
 
Jepp :D

himitsu 16. Mai 2012 17:12

AW: Regionale Einstellungen
 
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.

Cogito 17. Mai 2012 07:21

AW: Regionale Einstellungen
 
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?

ASM 17. Mai 2012 15:25

AW: Regionale Einstellungen
 
Zitat:

Zitat von Cogito (Beitrag 1166897)
.... 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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Seite 2 von 3     12 3      

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