Delphi - изменить расположение номеров ввода в TEdit - PullRequest
0 голосов
/ 08 января 2020

У меня есть регистрационная форма, созданная Delphi, в которой пользователь записывает свой номер телефона в поле TEdit, а форма BiDiMode называется bdRightToLeft, поскольку это приложение Arabi c.

Мне нужно сохранить BiDiMode как есть, но цифры отображаются в формате Arabi c, и мне нужно, чтобы они отображались в формате Engli sh.

Я пытался:

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', и все же цифры отображаются в формате Arabi c, несмотря на то, что раскладка клавиатуры фактически изменилась.

Как мне создать TEdit или любое другое поле показать только Engli sh формат чисел в интерфейсе Arabi c?

1 Ответ

0 голосов
/ 09 января 2020

Это не имеет никакого отношения к макету, я думаю, что ваша проблема с символами Unicode и Non-Unicode. Откройте приложение CharMap, и вы сможете найти все, что вам нужно. Найдите различия между кодом Unicode или кодом Ascii этих двух, возможно, вам придется сделать небольшой конвертер. Если вы используете Delphi 2009 или более позднюю версию, вы можете использовать следующие функции. для преобразования арабских c в английские sh (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;

и для преобразования Engli sh цифр в Arabi c цифры Вы можете использовать что-то вроде этого:

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;
...