Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Комбинаций клавиш Ctrl+C и Ctrl+V в TEdit'е. [D7, WinXP]


gdaujk ©   (2005-11-08 23:42:00) 

Я сделал потомок 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 ?


gdaujk   (2005-11-09 10:59:00) [1]

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;
...


umbra   (2005-11-09 10:10:00) [2]

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


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

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


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

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
...


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

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

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
Код прям сдесь написал, возможны опечатки ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо