Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Комбинаций клавиш Ctrl+C и Ctrl+V в TEdit е.   Найти похожие ветки 

 
gdaujk ©   (2005-11-08 23:42) [0]

Я сделал потомок TEdit"а (точнее TCustomEdit, но в данном случае это не имеет значения). В этом потомке я перекрыл KeyDown следующим образом:

procedure TgdaRealEdit.KeyPress(var Key: Char);
begin
 inherited;
 case Key of
 "0".."9", #8:      ;
 …
 else Key := #0;
 end;
end;


то есть позволил юзеру вводить только 0..9 (в данном случае).

Подскажите пожалуйста, как тем же способом разрешить пользователю ввод комбинаций клавиш Ctrl+C и Ctrl+V.

PS: есть вариант разрешить ввод Key =  #3 и Key = #22, приходящие при нажатии Ctrl+C и Ctrl+V соответственно. Только что такое #3 и #22 ?


 
Delphi_is_cool ©   (2005-11-09 00:03) [1]

Для того чтобы юзер мог вводить только цифры сделай так:

var
 NewStyle: Integer;
begin
 NewStyle := GetWindowLong(Edit_Handle, GWL_STYLE) or ES_NUMBER;
 SetWindowLong(Edit_Handle, GWL_STYLE, NewStyle);
end;


А чтоб запретить копировать в вставлять, надо ловить мессаги WM_COPY и WM_PASTE.

ps
Код прям сдесь написал, возможны опечатки ...


 
gdaujk ©   (2005-11-09 00:47) [2]

Delphi_is_cool ©   (09.11.05 00:03) [1]
Для того чтобы юзер мог вводить только цифры сделай так:

The ES_NUMBER style restricts input to the edit control to digits only... Мне же надо действительные числа (0..9, DecimalSeparator, -), т. е. код KeyPress у меня отличается от приведённого в сабже.

А чтоб запретить копировать в вставлять, надо ловить мессаги WM_COPY и WM_PASTE.
Было б всё так просто. Проблемма не в этом, а в том, что код, описанный в сабже, запрещает копировать/вставлять что-либо в Edit при нажатии Ctrl+C и Ctrl+V:
...
else Key := #0
...


 
AbrosimovA   (2005-11-09 08:50) [3]

Тем не менее можно вставлять через всплывающее меню по правой клавише мыши.


 
umbra ©   (2005-11-09 10:10) [4]

обработчики OnKeyDown и OnKeyUp очень для этих целей подходят.


 
gdaujk ©   (2005-11-09 10:59) [5]

AbrosimovA   (09.11.05 08:50) [3]
Не спорю. Но вопрос не в этом.

umbra ©   (09.11.05 10:10) [4]
Это сложнее. Наверное можно обойтись и Key =  #3 и Key = #22 в KeyPress. Если других вариантов нет, то я сделаю именно так.

procedure TgdaRealEdit.KeyPress(var Key: Char);
begin
...
 case Key of
  ...
  #3, #22:;
  …
   else Key := #0;
 end;
end;
...



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
2-1131904644
on-lite
2005-11-13 20:57
2005.12.04
Фильтр отображения TDBGrid


2-1130844404
Moningstar
2005-11-01 14:26
2005.12.04
Из DLL не в DLL


2-1132210863
diwww
2005-11-17 10:01
2005.12.04
Ошибка при закрытии одной из одинаковых форм


6-1125140900
NikNet
2005-08-27 15:08
2005.12.04
Как отправить письмо на почту Yandex через прокси?


14-1131976315
hbreaker
2005-11-14 16:51
2005.12.04
Форма и цвет. Мой хомяк.