![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Как сделать так, чтобы при попытке ввести в поле текст раскладка клавиатуры автоматически менялась на русский.
|
#2
|
|||
|
|||
![]() LoadKeyboardLayout('00000419', KLF_ACTIVATE);
Фунция API (модуль Windows) будет переключать клавиатру на русскую раскладку, если в системе установлен русский язык. Не забывайте делать резервные копии |
#3
|
|||
|
|||
![]() спасибо, понял
вот ситуация: в одно поле можно вводить только русский текст (например фамилия), во второе - только латинский (например название автомобиля или номер кузова для Японцев и Европейцев) в трете - опять только русский и т.д. в программе реализован переход между полями плавишами Enter и Tab(по умолчанию), я могу менять раскладку программно на онКлик по полю, а как ее менять если переход осуществляется клавишами? Последний раз редактировалось Darken, 30.03.2009 в 10:37. |
#4
|
|||
|
|||
![]() Darken, поля ввода прекрасно обрабатывают события OnEnter (когда поле получает фокус) и OnExit (когда фокус уходит). На мой взгляд, переключать раскладки лучше по этим событиям, а не по клику. Тогда решается вопрос с переходом клавишами.
|
#5
|
|||
|
|||
![]() ок, спасибо
|
#6
|
|||
|
|||
![]() А как сделать чтоб в поле можно было вводить только цифры
|
#7
|
||||
|
||||
![]() Код:
if not (Key in ['0'..'9', #8]) then // если Key не цифра или backspase Key := #0; |
#8
|
||||
|
||||
![]() Если кому интересно мое мнение: "Поубивал бы всех тех программистов которые переключают раскладки без участия пользователя". Потому как я знаю какая раскладка у меня текущая и когда мне это нужно переключаю на нужную.
Darken, вот начну я пользоваться твоей программой, надо будет ввести текст на русском, я встану на поле ввода, и, зная что в системе у меня по умолчанию английский переключусь на автомате, просто не задумываясь над действиями. А во время получения фокуса твое поле ввода уже переключило язык на русский, а т.к. у меня в системе всего 2 раскладки я снова получу английский. Понятно что я это замечу, матюгнусь, переключу еще раз, закрою программу, uninstall запущу. ЗЫЖ Если уж тебе так важна только кирилица, обрабатывай KeyPress и если буква из ЛАТИНИЦЫ меняй ее на букву из КИРИЛЛИЦИ стоящую на этой же кнопки (т.е. при вводе "q" она автоматически меняется на "й"). Не забывай еще и о том строчная или заглавная буква введена. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#9
|
||||
|
||||
![]() Думаю лучше сделать так:
Код:
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
|
|||
|
|||
![]() Цитата:
Но есть же и другие пользователи. Сколько раз наблюдал одну и ту же картину: сидит тетенька склонившись над клавиатурой и тупо набивает текст, а на экран лезет нетленный опус "Ljujdjh yf jrfpfybt eckju..." Так что в моих прогах автоматический переход на русскую раскладку частая фича. Зависит, правда, от контингента народонаселения у заказчика. Ну, надеюсь, мои гениальные работы с автопереключением не попадут в жесткие руки Aristarh Dark (еще пожить охота). Не забывайте делать резервные копии |
#11
|
||||
|
||||
![]() А ведь здравая идея проскочила не переключать раскладку, а сделать автотранслитер. Что-то типа такого:
Код:
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
|
|||
|
|||
![]() Страдалецъ, так будет эффективнее:
Код:
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; |
#13
|
||||
|
||||
![]() чуваки, хм, прикольно, респект))
|