Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2014, 11:07   #1
WInnER2192
 
Регистрация: 18.05.2010
Сообщений: 9
Вопрос Проверка ввода данных в Delphi XE5

Добрый день написал программу и начал создавать защиту от дурака, и столкнулся с такой проблемой. Мне нужно что бы пользователь в эдит мог вводить только буквы русского алфавита, я написал проверку , НО она не работает, хотя в delphi 7 все хорошо работает
Вот код :
Код:
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not (Key in ['а'..'Я','0'..'9',#8])then Key:=#0;
end;
Цифры и английский алфавит пропускает, а вот если делаю русский, то не пропускает.
Временно пока что сделал вот такой код
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not(((Key >= 'а') and (Key <= 'я')) or ((Key >= 'А') and (Key <= 'Я')) or (Key=#8)) then Key:=#0;
end;
Повторяю пишу в delphi XE5

Последний раз редактировалось Stilet; 02.05.2014 в 11:14.
WInnER2192 вне форума Ответить с цитированием
Старый 02.05.2014, 11:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поправьте меня если ошибаюсь, но в ХЕ-шках исходник описыватся в юникоде. Соответственно и русские буквы в юникоде. Попробуй в редакторе Делфи перекодировать исходник в ANSI. По крайней мере в Лазарусе это помогает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 11:30   #3
WInnER2192
 
Регистрация: 18.05.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Поправьте меня если ошибаюсь, но в ХЕ-шках исходник описыватся в юникоде. Соответственно и русские буквы в юникоде. Попробуй в редакторе Делфи перекодировать исходник в ANSI. По крайней мере в Лазарусе это помогает.
Вот я попробовал
Код:
Код:
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Not (Key in [chr(1040)..chr(1103),'0'..'9',#8])then Key:=#0;
end;
Вот так пробовал, то же не получается
1040 - а 1103- Я
WInnER2192 вне форума Ответить с цитированием
Старый 02.05.2014, 12:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сложно сказать как в ХЕшках работает in. Говорю же - попробуй перекодировать сам исходник. Я давно в Делфи уже не работаю, но это пока единственное что могу предложить по памяти.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 12:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  if not (AnsiString(Key)[1] in ['А'..'Я','а'..'я','0'..'9',#8]) then Key:=Chr(0);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.05.2014, 13:29   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Поправьте меня если ошибаюсь, но в ХЕ-шках исходник описыватся в юникоде. Соответственно и русские буквы в юникоде.
Нет не то.
Просто конструкция ['А'..'Я','а'..'я','0'..'9',#8] рассматривается компилятором как set of AnsiChar. Ибо другого толкования эта конструкция не допускает. А Char в Д2009+ это WideChar. Только поэтому проверка Key in ['а'..'Я','0'..'9',#8] не работает для нелатинских символов. Единственный выход это как-то приводить Key к AnsiChar. Например так как показал Аватар.
P.S. А кодировка pas-файла к этому не имеет никакого отношения.
northener вне форума Ответить с цитированием
Старый 02.05.2014, 21:28   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,771
По умолчанию

Мне, кажется, я уже писал где-то такую забористую проверку в стиле FastCode:
Код:
begin
  if (Word(Key) and $FF00 = $0400) and (Byte(Key) in [$01, $10..$4F, $51]) then
  begin
    // русские буквы, включая Ё/ё
  end;
end;
Менее забористо будет так:
Код:
begin
  if (Key >= 'А' and Key <= 'я') or (Key = 'Ё') or (Key = 'ё') then
  begin
    // русские буквы, включая Ё/ё
  end;
end;

Последний раз редактировалось Vapaamies; 02.05.2014 в 21:32.
Vapaamies вне форума Ответить с цитированием
Старый 04.05.2014, 09:10   #8
WInnER2192
 
Регистрация: 18.05.2010
Сообщений: 9
По умолчанию

Большое спасибо всем, отдельное спасибо Аватару
WInnER2192 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi xe5 TUberwer Общие вопросы Delphi 2 01.02.2014 00:25
Форматирование ввода в колонку dataGridView и проверка правильности ввода tumanovalex C# (си шарп) 1 31.05.2011 19:56
Контроль ввода данных в DBgrid(или Table?) Delphi Студло Помощь студентам 8 11.02.2010 18:37
Админская страница, проверка ввода данных SwiP PHP 29 28.04.2009 20:25
проверка ввода данных в форму @Simpson JavaScript, Ajax 1 12.11.2007 02:17