|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите правильно написать 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
|
||||
|
||||
Взамен удобнее использовать OnKeyDown. Не зависит от раскладки и регистра.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
Эх, пердюмонокль какой, усложнять, так усложнять можно ещё 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
|
|||
|
|||
Вот в этой статье есть работа склавишами как с кодами и как с символами
|