Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen (https://www.delphipraxis.net/186475-vcl-touchkeyboard-zeigt-bei-manchen-sprachen-falsches-dezimaltrennzeichen.html)

Der schöne Günther 4. Sep 2015 17:43


VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe ein schräges Problem:

Ich bin faul und nutze das TTouchKeyboard von Embarcadero. Auch hat es einen "NumPad"-Style. Das erste Bild zeigt ein "deutsches" Numpad. Man beachte das Komma als Dezimaltrennpunkt.

Schauen wir in andere Länder. Auf einem russischen System? Die nutzen auch ein Komma, alles in Butter. In manchen Ländern gerät es aber durcheinander: Das TouchKeyboard zeigt einen Punkt obwohl der DecimalSeparator definitiv ein Komma ist. In Frankreich oder Italien ist das der Fall (zweites Bild).

Ich bin ratlos. Was läuft hier falsch? Was kann ich tun damit der Benutzer wieder Kommazahlen eingeben kann?

CHackbart 4. Sep 2015 17:58

AW: Franzosen dürfen keine Kommazahlen benutzen
 
Mach doch ein Wert := StringReplace(Wert,',','.',[rfReplaceAll]);

Christian

Der schöne Günther 4. Sep 2015 18:02

AW: Franzosen dürfen keine Kommazahlen benutzen
 
Ich hätte es schon gerne dass die Leute auf ihrem TouchKeyboard auch sehen was sie erwarten. Grade Franzosen. Grade die. :duck:

Daniel 4. Sep 2015 18:07

AW: Franzosen dürfen keine Kommazahlen benutzen
 
Und kannst Du Deinem Thema bitte noch einen sinnvollen Titel geben?

TiGü 7. Sep 2015 11:45

AW: VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen
 
Boah, jetzt habe ich an der Lösung ewig rumgewerkelt, ganz viel Code geschrieben mit class helpern, um an den internsten Membervariablen rumzuschrauben, und nichts kam bei rum. :evil:

Dann ein kleiner Geistesblitz und siehe da, es ist super simpel: :roll:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Touch.Keyboard, Vcl.StdCtrls,
  Common.Classes.KeyboardLayoutChanger;

type
  TGünnisKeyboardButton = class(Vcl.Touch.Keyboard.TCustomKeyboardButton)
  public
    procedure Paint(Canvas: TCustomCanvas = nil); override;
  end;

  TForm2 = class(TForm)
    TouchKeyboard1: TTouchKeyboard;
    TouchKeyboard2: TTouchKeyboard;
    ComboBox1: TComboBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    FChanger: TKeyboardLayoutChanger;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  FChanger := TKeyboardLayoutChanger.Create();
  TouchKeyboard2.DefaultButtonClass := TGünnisKeyboardButton;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  FChanger.Free;
end;

procedure TForm2.ComboBox1Change(Sender: TObject);
begin
  FormatSettings := TFormatSettings.Create(ComboBox1.Text);
  Label1.Caption := String.Format('Der DecimalSepator ist "%s"', [FormatSettings.DecimalSeparator]);
  FChanger.changeKeyboardLayout(ComboBox1.Text);
end;

procedure TGünnisKeyboardButton.Paint(Canvas: TCustomCanvas);
begin
  if Self.Key.Vk = VK_DECIMAL then
  begin
    Self.Caption := FormatSettings.DecimalSeparator;
  end;
  inherited Paint(Canvas);
end;

end.

Der schöne Günther 7. Sep 2015 12:45

AW: VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen
 
Vielen Dank, so weit bin gar nicht vorgedrungen. Das ist wirklich elegant.

Aber jetzt wird es erst richtig spannend: Das TouchKeyboard gibt in Dinge wie Edit-Felder ja immer noch Punkte ein. Dann drückte ich die VK_DECIMAL-Taste auf meiner verdreckten Tasatatur. Und mit französischer Belegung kommen da auch Punkte raus! :bounce1:

Eine Kurze Suche nach "vk_decimal French" führt zu dem Ergebnis dass, die Franzosen beispielsweise, tatsächlich so eine Tastatur haben: http://www.worldlanguage.com/Product...vory-46603.htm
Das TTouchKeyboard hatte also von Anfang an Recht. Irre.

Mit deiner Hilfe kann ich das jetzt, nach Belieben auf verschiedene Arten lösen: Entweder man gibt Punkte ein und das Programm parst im Hintergrund vernünftige Kommazahlen raus. Oder man ändern den Ziffernblock so ab, dass er das richtige Trennzeichen ausspuckt. Jetzt muss ich mich nur noch entscheiden. Und mache dafür wohl ein neues Thema auf.

Danke nochmal :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.

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