AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen

Offene Frage von "Der schöne Günther"
Ein Thema von Der schöne Günther · begonnen am 4. Sep 2015 · letzter Beitrag vom 7. Sep 2015
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen

  Alt 4. Sep 2015, 18:43
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?
Miniaturansicht angehängter Grafiken
2015-09-04_18-32-57.png   2015-09-04_18-32-52.png  
Angehängte Dateien
Dateityp: zip DecimalSeparatorKeyboard.zip (5,2 KB, 3x aufgerufen)

Geändert von Der schöne Günther ( 4. Sep 2015 um 19:09 Uhr) Grund: Beispielprojekt hinzugefügt
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#2

AW: Franzosen dürfen keine Kommazahlen benutzen

  Alt 4. Sep 2015, 18:58
Mach doch ein Wert := StringReplace(Wert,',','.',[rfReplaceAll]);

Christian
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Franzosen dürfen keine Kommazahlen benutzen

  Alt 4. Sep 2015, 19:02
Ich hätte es schon gerne dass die Leute auf ihrem TouchKeyboard auch sehen was sie erwarten. Grade Franzosen. Grade die.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Franzosen dürfen keine Kommazahlen benutzen

  Alt 4. Sep 2015, 19:07
Und kannst Du Deinem Thema bitte noch einen sinnvollen Titel geben?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen

  Alt 7. Sep 2015, 12:45
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.

Dann ein kleiner Geistesblitz und siehe da, es ist super simpel:
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: VCL-Touchkeyboard zeigt bei manchen Sprachen falsches Dezimaltrennzeichen

  Alt 7. Sep 2015, 13:45
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!

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

Geändert von Der schöne Günther ( 7. Sep 2015 um 13:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 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