Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.03.2009, 10:02
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию запретить ввод латиницы

Как сделать так, чтобы при попытке ввести в поле текст раскладка клавиатуры автоматически менялась на русский.
Ответить с цитированием
  #2  
Старый 30.03.2009, 10:21
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

LoadKeyboardLayout('00000419', KLF_ACTIVATE);

Фунция API (модуль Windows) будет переключать клавиатру на русскую раскладку, если в системе установлен русский язык.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #3  
Старый 30.03.2009, 10:33
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию

спасибо, понял

вот ситуация: в одно поле можно вводить только русский текст (например фамилия), во второе - только латинский (например название автомобиля или номер кузова для Японцев и Европейцев) в трете - опять только русский и т.д.

в программе реализован переход между полями плавишами Enter и Tab(по умолчанию), я могу менять раскладку программно на онКлик по полю, а как ее менять если переход осуществляется клавишами?

Последний раз редактировалось Darken, 30.03.2009 в 10:37.
Ответить с цитированием
  #4  
Старый 30.03.2009, 12:02
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Darken, поля ввода прекрасно обрабатывают события OnEnter (когда поле получает фокус) и OnExit (когда фокус уходит). На мой взгляд, переключать раскладки лучше по этим событиям, а не по клику. Тогда решается вопрос с переходом клавишами.
Ответить с цитированием
  #5  
Старый 31.03.2009, 07:36
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию

ок, спасибо
Ответить с цитированием
  #6  
Старый 31.03.2009, 16:44
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

А как сделать чтоб в поле можно было вводить только цифры
Ответить с цитированием
  #7  
Старый 31.03.2009, 16:47
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Код:
 if not (Key in ['0'..'9', #8]) then  // если Key не цифра или backspase
    Key := #0;  
Ответить с цитированием
  #8  
Старый 31.03.2009, 18:39
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Если кому интересно мое мнение: "Поубивал бы всех тех программистов которые переключают раскладки без участия пользователя". Потому как я знаю какая раскладка у меня текущая и когда мне это нужно переключаю на нужную.
Darken, вот начну я пользоваться твоей программой, надо будет ввести текст на русском, я встану на поле ввода, и, зная что в системе у меня по умолчанию английский переключусь на автомате, просто не задумываясь над действиями. А во время получения фокуса твое поле ввода уже переключило язык на русский, а т.к. у меня в системе всего 2 раскладки я снова получу английский. Понятно что я это замечу, матюгнусь, переключу еще раз, закрою программу, uninstall запущу.

ЗЫЖ Если уж тебе так важна только кирилица, обрабатывай KeyPress и если буква из ЛАТИНИЦЫ меняй ее на букву из КИРИЛЛИЦИ стоящую на этой же кнопки (т.е. при вводе "q" она автоматически меняется на "й"). Не забывай еще и о том строчная или заглавная буква введена.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #9  
Старый 31.03.2009, 20:07
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Думаю лучше сделать так:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['А'..'я', #8, '0'..'9', #32]) then
  begin
    Key := #0;
    MessageBeep(48);
  end;
end;
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
Ответить с цитированием
  #10  
Старый 31.03.2009, 21:09
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Если кому интересно мое мнение: "Поубивал бы всех тех программистов которые переключают раскладки без участия пользователя".
Мягко попробую не согласится с Aristarh Dark. Я подвизаюсь на поприще прикладного программирования и, если бы мне подсунули такую программульку, то я тоже попытался бы приобрести ревОльвер для поубивания тех, кто это сделает.
Но есть же и другие пользователи. Сколько раз наблюдал одну и ту же картину: сидит тетенька склонившись над клавиатурой и тупо набивает текст, а на экран лезет нетленный опус "Ljujdjh yf jrfpfybt eckju..."
Так что в моих прогах автоматический переход на русскую раскладку частая фича. Зависит, правда, от контингента народонаселения у заказчика.
Ну, надеюсь, мои гениальные работы с автопереключением не попадут в жесткие руки Aristarh Dark (еще пожить охота).
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #11  
Старый 31.03.2009, 22:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А ведь здравая идея проскочила не переключать раскладку, а сделать автотранслитер. Что-то типа такого:
Код:
Const
 Lat = '~@#$^&QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?`qwertyuiop[]asdfghjkl;''\zxcvbnm,./';
 Cyr = 'Ё"№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,ёйцукенгшщзхъфывапролджэ\ячсмитьбю.';
var
  i: Integer;
begin
 for i := 1 to Length(Lat)
 do if Key=Lat[i] then Key := Cyr[i];
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
xxbesoxx (24.08.2014)
  #12  
Старый 01.04.2009, 09:04
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Страдалецъ, так будет эффективнее:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Lat = '~@#$^&QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?`qwertyuiop[]asdfghjkl;''\zxcvbnm,./';
  Cyr = 'Ё"№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,ёйцукенгшщзхъфывапролджэ\ячсмитьбю.';
var
  i: Integer;
begin
  i := Pos(Key, Lat);
  if i <> 0 then Key := Cyr[i];
end;
Во-первых, потому, что функция Pos написана на assembler; во-вторых, в ней цикл не будет обходить всю строку, если символ Key уже найден в самом начале. Я, конечно, понимаю, что здесь это не критично, но это уж так — для наведения марафета... =)
Ответить с цитированием
  #13  
Старый 03.04.2009, 16:57
Аватар для joker7438
joker7438 joker7438 вне форума
Прохожий
 
Регистрация: 03.04.2009
Адрес: Одесса
Сообщения: 18
Репутация: 10
По умолчанию

чуваки, хм, прикольно, респект))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025