Delphi-PRAXiS
Seite 3 von 3     123   

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 18. Mai 2012 07:45

AW: Regionale Einstellungen
 
Zitat:

Zitat von ASM (Beitrag 1166939)
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;

Nee sorry, die Routine scheint nicht zu funktionieren bzw. zeigt keinerlei verändertes Verhalten.
Vielleicht wäre es einfacher in meiner Applikation den Punkt als Dezimalseparator zu definieren? Dann bräuchte ich nichts am System zu verändern. Weiß jemand ob das funktionieren kann, ich meine, global für die Anwendung den Punkt als Dezimaltrenner zuzulassen?

himitsu 18. Mai 2012 07:57

AW: Regionale Einstellungen
 
Delphi-Referenz durchsuchenDecimalSeparator und Delphi-Referenz durchsuchenThousandSeparator :?:

Cogito 18. Mai 2012 08:06

AW: Regionale Einstellungen
 
Ich hab die Lösung gefunden, es ist so simpel: Es gibt die globale Variable SysUtils.DecimalSeparator die dafür verantwortlich ist, wie Delphi das Dezimaltrennzeichen interpretiert. Das hat also gar nichts mit den regionalen Einstellungen des Systems oder sonstwelchen Einstellungen zu tun wie es scheint. Vielen Dank allen hier!

DeddyH 18. Mai 2012 08:14

AW: Regionale Einstellungen
 
Achwas :mrgreen:

Cogito 24. Mai 2012 10:51

AW: Regionale Einstellungen
 
Mist, doch noch nicht (ganz) gelöst. Der Kunde hat sich darauf comitted, als Dezimaltrennzeichen immer ein Komma zu verwenden. Jedoch gibt es unterschiedliche Tastaturen und alle diejenigen, die das Programm nutzen, möchten die Kommataste auf dem numerischen Block der Tastatur benutzen. Das Problem ist nun, das einige dort kein Komma haben, ich aber auch nicht an den Systemeinstellungen rumfummeln möchte, weil das eventuell wieder Einfluss darauf haben könnte, das andere Programme dann nicht mehr richtig funktionieren. Gibt es also eine Möglichkeit, das Dezimaltrennzeichen immer auf Komma zu stellen (Ja: Decimalseparator := ',') und die Taste im Num-Block IMMER als ein Komma zu interpretieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Seite 3 von 3     123   

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