Thema: Delphi Regionale Einstellungen

Einzelnen Beitrag anzeigen

Cogito

Registriert seit: 12. Jun 2008
280 Beiträge
 
#21

AW: Regionale Einstellungen

  Alt 18. Mai 2012, 07:45
.... 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?
  Mit Zitat antworten Zitat