Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/43: Рейтинг темы: голосов - 43, средняя оценка - 4.58
6 / 6 / 4
Регистрация: 11.12.2011
Сообщений: 142
1

Ввод русских букв

31.01.2013, 12:45. Показов 8701. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создал функцию для проверки ввода только русских и английских букв в которую отсылаю Key с метода onKeyPress. Проблема в том что код работает с англиканской раскладкой отлично, а вот с русской уже проблемы. Создал тему в разделе "Delphi для начинающих" и мне посоветовали написать здесь. Уже долго мучаюсь не могу решить эту проблему, HELP.
Вот код:

Delphi
1
2
3
4
5
6
7
8
9
10
function vvod(s:char):Boolean;
var mas:string;
i:byte;
begin
 
  if s in [ 'A'..'z','А'..'я','Ё','ё',#08] = True then
    result:=true
  else  result:=false;
 
end;
Delphi
1
2
3
4
5
6
7
8
9
procedure Tglavmenu.DBEdit6KeyPress(Sender: TObject; var Key: Char);
begin
if vvod(key)=true then
begin
key:=AnsiUpperCase(key)[1];
end
else
key:=#0;
end;
Пробовал и вот такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function vvod(s:char):Boolean;
var mas:string;
i:byte;
begin
  
  mas:='йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
  if s in ['A'..'z',#08] then result:=true
  else
  for i:=0 to Length(mas) do
  if s=mas[i] then result:=true
  else
  result:=false;
 
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2013, 12:45
Ответы с готовыми решениями:

Кракозябры при отображение русских букв в Delphi XE с компонентами ZEOSDBO7 и Ehlib
Здравствуйте. Есть проект, написан на Delphi XE,в ней стоит ZEOSDBO7, Ehlib для XE. В этом...

иероглифы вместо русских букв
Я создада отчет в rave (delphi7),сохранила его в формате rtf. все бы ничего,но возникли проблемы с...

Перевод русских букв в hex
Всем привет. Столкнулся с такой проблемой у меня есть функция. function StrToHex(source:...

Кракозябры по CHR вместо русских букв
Delphi XE function TUSComFox.ArrayToString(Data: TByteArray): String; Var I : Integer;...

13
36 / 36 / 7
Регистрация: 15.01.2013
Сообщений: 161
31.01.2013, 13:12 2
В моём проекте нижеприведённый код работает без проблем:

Delphi
1
2
3
4
function IsLetterKey(aKey : Char): boolean;
begin
  Result := aKey in [#8, 'a'..'z', 'A'..'Z', 'à'..'ÿ', 'À'..'ß'];
end;
В обработчике KeyPress пишем:
Delphi
1
2
3
4
5
  if not IsLetterKey(Key) then
  begin
    Key := #0;
    Beep;
  end;
Еще и пищать должно если неправильно ввёл
Ваш код вроде бы тоже на первый взгляд правильный,
но видимо где-то ошибка вкралась.
0
6 / 6 / 4
Регистрация: 11.12.2011
Сообщений: 142
31.01.2013, 13:24  [ТС] 3
Цитата Сообщение от ArtProud Посмотреть сообщение
В моём проекте нижеприведённый код работает без проблем:

Delphi
1
2
3
4
function IsLetterKey(aKey : Char): boolean;
begin
  Result := aKey in [#8, 'a'..'z', 'A'..'Z', 'à'..'ÿ', 'À'..'ß'];
end;
В обработчике KeyPress пишем:
Delphi
1
2
3
4
5
  if not IsLetterKey(Key) then
  begin
    Key := #0;
    Beep;
  end;
Как ни странно но ваш код тоже отказывается работать. Видать что-то у меня с Delphi или с кадрировкой. Помогите плз найти проблему.
0
36 / 36 / 7
Регистрация: 15.01.2013
Сообщений: 161
31.01.2013, 13:30 4
а в чём проблема то по-детальнее?
русские буквы не пропускает?

язык в панели управления - русский (Россия)?
0
6 / 6 / 4
Регистрация: 11.12.2011
Сообщений: 142
31.01.2013, 13:43  [ТС] 5
Да, русские буквы не вводятся.

Добавлено через 5 минут
Язык интерфейса - русский
Формат - Русский(Россия)
Текущее расположение - Беларусь

Добавлено через 6 минут
В панели "язык и службы текстового ввода" Стоит Клавиатура - Русская, Другие - lnk Correction(только 64-разрядные). Может тут кроется проблема.
0
36 / 36 / 7
Регистрация: 15.01.2013
Сообщений: 161
31.01.2013, 13:58 6
теже самые настройки что и у меня.
windows 7
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.01.2013, 14:16 7
замени ansi на wide
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
31.01.2013, 16:16 8
Gantzer61, Для обработчика OnKeyPress текстового поля пропишите
Delphi
1
if not (Key in ['0'..'9',  'A'..'Z', 'a'..'z', #8, #32 ]) then Key:=#0;
Добавлено через 28 минут
Небольшая поправка. Предыдущий мой код запрещает ввод русских букв.
Вот так будет вернее
Delphi
1
if not (Key in ['а'..'я', 'А'..'Я',  'A'..'Z', 'a'..'z', #8, #32 ]) then Key:=#0;
0
6 / 6 / 4
Регистрация: 11.12.2011
Сообщений: 142
31.01.2013, 16:54  [ТС] 9
Цитата Сообщение от droider Посмотреть сообщение
Gantzer61
Delphi
1
if not (Key in ['а'..'я', 'А'..'Я',  'A'..'Z', 'a'..'z', #8, #32 ]) then Key:=#0;
Русские буквы все равно не позволяет вводить. Решил написать другой код в котором будет запрет на то что нельзя вводить, но вот все равно интересно почему же у меня не хочет вводить русские буквы.

Delphi
1
2
3
if s in ['1'..'9','!','@','#','$','%','^','&','*','(',')','-','=','_','+','`','~','/','?','.',',','<','>','[',']','{','}','"'] = True then
    result:=false
  else  result:=true;
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
31.01.2013, 19:22 10
Gantzer61, есть один момент:
Delphi
1
if not (Key in ['а'..'я', 'А'..'Я',  'A'..'Z', 'a'..'z', #8, #32 ]) then Key:=#0
не работает в Delphi XE3. В Delphi 7 - проблем нет.
А так

Delphi
1
2
3
4
5
6
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['0'..'9'] then Key:=#0;
end;
 
end.
работает в обеих версиях.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
31.01.2013, 19:36 11
Если у тебя юникодная Delphi, то попробуй так
Delphi
1
2
3
4
5
6
7
8
9
10
function vvod(s: Char): Boolean;
  var
    mas: Ansistring;
   begin
    mas:=s;
    if AnsiChar(mas[1]) in ['A' .. 'z', 'А' .. 'я', 'Ё', 'ё', #08] = True then
      result := True
    else
     result := false;
   end;
1
6 / 6 / 4
Регистрация: 11.12.2011
Сообщений: 142
01.02.2013, 10:49  [ТС] 12
Цитата Сообщение от antikiler_ Посмотреть сообщение
Если у тебя юникодная Delphi, то попробуй так
Delphi
1
2
3
4
5
6
7
8
9
10
function vvod(s: Char): Boolean;
  var
    mas: Ansistring;
   begin
    mas:=s;
    if AnsiChar(mas[1]) in ['A' .. 'z', 'А' .. 'я', 'Ё', 'ё', #08] = True then
      result := True
    else
     result := false;
   end;
Ух, спасибо antikiler. Код работает как надо.

Delphi
1
2
3
4
function vvod(s:Ansistring):Boolean;
begin
    result:=AnsiChar(s[1]) in ['A' .. 'z', 'А' .. 'я', 'Ё', 'ё', #08];
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.02.2013, 19:52 13
Цитата Сообщение от Gantzer61 Посмотреть сообщение
Код работает как надо.
Угу, угу. Берем Юникодную версию Дельфи, и тут же вышибаем всему Юникоду мозги преобразовав его к ANSI... Это называется "как надо"? Тогда программе место в корзине...

Никогда не считай, что те же самые системные настройки, которые выставлены у тебя, выставлены во всем мире. И если у меня будет (а она и есть, если что) отличная от Cyrillic кодировка для неЮникодных программ, то пролетает твоё "как надо", как фанера над Парижем...

Я вообще бы советовал всем держать под рукой машину, в которой неюникодным выставлен какой-нибудь СОВСЕМ некириллический набор символов. Хинди, например. Узнаете очень много интересного о тех Unicode-совместимых программах, которые вы считали написанными правильно, и правильно работающими...
0
Заблокирован
14.07.2013, 18:23 14
Pascal
1
If not (Pos(key,'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя')>0) Then Key:=#0;
Некроподъём.
0
14.07.2013, 18:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2013, 18:23
Помогаю со студенческими работами здесь

Вывод на экран в алфавитном порядке всех различных прописных русских букв
Данный код выводит все заглавные буквы, что нужно изменить в коде, чтоб выводил только по одной...

Как запретить ввод букв в колонку с числами и наоборот
База сделана через Database Desktop.

Автомобильные номера состоят из 1,2, или 3 букв и 4 цифр. используется 30 букв, найти число таких букв
Автомобильные номера состоят из 1,2, или 3 букв и 4 цифр. используется 30 букв, найти число таких...

Ввод русских букв
Доброго времени суток. Я пишу программу, где нужно вводить Имена русскими буквами. Но Когда я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru