我有一个由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或任何类型的字段在阿拉伯语界面中仅显示英文数字格式?
与布局无关,我认为您的问题出在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;