Delphi-在TEdit中更改输入数字的布局

问题描述 投票:0回答:1

我有一个由Delphi制作的注册表,其中用户在TEdit字段中输入他们的电话号码,而BiDiMode的形式是bdRightToLeft,因为它是阿拉伯语应用程序。

我需要保持BiDiMode不变,但是数字以阿拉伯格式显示并且我需要它们以英文格式显示。

我尝试过:

var
  lang: HKL;
begin
  {
    where pcKeyboard is:
    '00000401' - arabic
    '00000409' - english
    '00000419' - russian
    '00000422' - ukrainian
    '00000407' - german
    '0000040C' - french
    '00000410' - italian
    '00000416' - portuguese
    '0000040A' - spanish
  }
  lang := LoadKeyboardLayout('00000409', 0);
  ActivateKeyboardLayout(lang, KLF_ACTIVATE);

[但是它只是将键盘更改为'Lang'参数中的语言,尽管实际上键盘布局已发生变化,但数字仍以阿拉伯格式显示。

如何使TEdit或任何类型的字段在阿拉伯语界面中仅显示英文数字格式?

delphi input layout keyboard arabic
1个回答
0
投票

与布局无关,我认为您的问题出在Unicode和非Unicode字符上。打开CharMap应用,您将找到所需的一切。找出两者之间的Unicode代码或Ascii代码之间的差异,也许您必须做一个小型转换器。如果您使用的是Delphi 2009或更高版本,则可以使用以下功能。要将阿拉伯语转换为英语(将Unicode数字转换为非Unicode数字),可以使用以下方式:

function ArabicDigitsToEnglish(AText: string): string;
const
  EnglishDigits = '0123456789';
  ArabicDigits = '۰۱۲۳۴۵۶۷۸۹';
var
  I: Integer;
  TempString: string;
begin
  TempString := AText;
  for I := 1 to Length(EnglishDigits) do
    TempString := StringReplace(TempString, ArabicDigits[i], EnglishDigits[i],
      [rfReplaceAll]);
  Result := TempString;
end;

并且要将英语数字转换为阿拉伯数字,您可以使用类似以下的内容:

function EnglishDigitsToArabic(AText: string): string;
const
  EnglishDigits = '0123456789';
  ArabicDigits = '۰۱۲۳۴۵۶۷۸۹';
var
  I: Integer;
  TempString: string;
begin
  TempString := AText;
  for I := 1 to Length(EnglishDigits) do
    TempString := StringReplace(TempString, EnglishDigits[i], ArabicDigits[i],
      [rfReplaceAll]);
  Result := TempString;
end;
© www.soinside.com 2019 - 2024. All rights reserved.