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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.10.2013, 21:41
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию Помогите правильно написать OnKeyPress

Имеется код
Код:
 case Key of

  ..............

  'G', 'g', 'П', 'п'  :
  begin
    s := edtCurFrame.Text;
    Delete(s,1,1); Insert('G', s, 1);
    Key:=#0;
    edtCurFrame.Text:=s;
    edtCurFrame.SelLength:=0;
    edtCurFrame.SelStart:= Length(s);
  end;
и вот таким "макаром" еще семь клавиш , т.е. задача: при нажатии на соответствующую клавишу должен вставляться определенный символ в определенное место в строке, не зависимо от раскладки клавиатуры и регистра.
Собственно все работает, но подозреваю, что код можно написать проще, например, создать массив, что-то типа
Код:
var charry: array[1..8] of char;
и проверять содержится ли в этом массиве нажатая клавиша, а как дальше объяснить программе, что мне нужна заглавная, латинская буква?
Ответить с цитированием
  #2  
Старый 23.10.2013, 22:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Взамен удобнее использовать OnKeyDown. Не зависит от раскладки и регистра.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 24.10.2013, 04:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Эх, пердюмонокль какой, усложнять, так усложнять можно ещё G-кодом (здесь на весь латинский алфавит в кверти формате, уберите лишние знаки)
Код:
 function zn(ds: byte): char;
 const
  scn: array[0..1] of array [0..25] of byte =
  ((81, 87, 69, 82, 84, 89, 85, 73, 79, 80, 65, 83, 68,
    70, 71, 72, 74, 75, 76, 90, 88, 67, 86, 66, 78, 77 ),
  (201,214,211,202,197,205,195,216,217,199,212,219,194,
   192,207,208,206,203,196,223,215,209,204,200,210,220));
 var
 i: integer;
 begin
   Result:= char(ds);
   for i := 0 to 25 do
    if (ds = scn[0, i])      or
       (ds = scn[0, i] + 32) or
       (ds = scn[1, i])      or
       (ds = scn[1, i] + 32) then
         begin
          Result:= char(scn[0, i]);
          Exit;
         end;
end;
использование
Код:
...
if zn(Byte(Key)) in ['G'{,'A','R','B','','','',''}] then
  with edtCurFrame do
   begin
    s:= Text;
    if Length(s) > 0 then 
      s[1]:= zn(Byte(Key))
     else 
      s:=    zn(Byte(Key));
    Key:= #0;
    Text:= s;
    SelLength:= 0;
    SelStart:= Length(Text);
   end;
...
из плюсов - на все нужные знаки будет такое одно.

З.Ы. Немного сократил букофф

Последний раз редактировалось Alegun, 24.10.2013 в 11:26. Причина: дополнение
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Помидоркин (24.10.2013)
  #4  
Старый 31.10.2013, 17:18
petrovichtim petrovichtim вне форума
Прохожий
 
Регистрация: 14.01.2013
Адрес: Москва
Сообщения: 2
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Вот в этой статье есть работа склавишами как с кодами и как с символами
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter