![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.36.174] |
![]() |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата and85 @ Есть маленькое замечание. Нигде не обрабатывается вставка из буфера винды. Тоесть, если у меня в буфере белиберда 'алдывраывлоарыдлаорывдлаорыва', то нажав Shift+Insert, я смогу эту бяку к себе в эдит вставить:) Не сможешь. Цитата subsonic @ как сделать, чтоб в определенное количество едитов. можно было вводить только цифры, и стирать кнопкой backspace??? ![]() ![]() procedure TForm1.Edit1KeyPress(Sender:TObject;var Key:Char); begin if not (Key in [#8, '-','0'..'9']) or (Key = '-') and (Length((Sender as TEdit).Text) <> 0) then Key:=#0; end; |
Сообщ.
#17
,
|
|
|
Просто добавить символ бэкспейса (#8) в число разрешенных ![]() ![]() if not (Key in [#8,'-','0'..'9']) Добавлено Цитата and85 @ Есть маленькое замечание. Нигде не обрабатывается вставка из буфера винды. Тоесть, если у меня в буфере белиберда 'алдывраывлоарыдлаорывдлаорыва', то нажав Shift+Insert, я смогу эту бяку к себе в эдит вставить:) P.S. У andrew.virus это похоже учитывается:) Проще добавить обработчик OnChange, чем городить спец.контрол, да еще и "с нуля" ![]() PS: Кстати виндовый стиль эдита ES_NUMBER также не отслеживает вставку "белиберды" из буфера обмена ![]() |
Сообщ.
#18
,
|
|
|
Backspace - символ #8. Просто допусти и его
|
Сообщ.
#19
,
|
|
|
Цитата Просто добавить символ бэкспейса (#8) а как узнать символы каждой кнопки на клаве? |
Сообщ.
#20
,
|
|
|
Цитата subsonic @ а как узнать символы каждой кнопки на клаве? Поставь брейкпойнт в обработчике, запусти прогу, и смотри, чему равен Key ![]() |
Сообщ.
#21
,
|
|
|
Символы - то, что написано. Плюс #7 - табуляция.
Остальные по кодам идут, это OnKeyUp обычно контролирует. VK_F1 и остальные |
Сообщ.
#22
,
|
|
|
цикл сделать по коллекции ParControl.Controls, где ParControl - контрол на котором лежат Едиты (форма или панель, что там у вас) ParControl.ControlCount - кол-во дочерних контролов |
Сообщ.
#23
,
|
|
|
Цитата Romkin @ Плюс #7 - табуляция Вообще-то табуляция VK_TAB = #9 ![]() |
Сообщ.
#24
,
|
|
|
Цитата leo @ Вообще-то табуляция VK_TAB = #9 Ой. Точно. А 7 - это бип ![]() |
Сообщ.
#25
,
|
|
|
вообще то проще посмотреть в ASCII таблице
![]() |
Сообщ.
#26
,
|
|
|
Вот, как раз только что делал такую штуку. Подумал-подумал, и решил, что для цифрового поля должны вводиться
1)Цифры 2)Backspase 3)Ну и стрелки назад-вперед, видимо - иначе представляю, как юзверь будет материться, вогнав длинную строку, и поняв, что сделал ошибку. И тогда то, что здесь описывалось, будет выглядеть так. ![]() ![]() unit klavishi; interface procedure klavishi1(var key:char); implementation procedure klavishi1 (var key:char); begin case key of '0'..'9':; chr(8),chr(37),chr(39):; else key:=Chr(0); end; end; end. До того, чтобы компонент писать, я вот пока не дошел. Но модуль отдельный как раз сделал - подключаешь его, и пишешь в событие поля ввода на OnKeyPress ![]() ![]() klavishi; |
Сообщ.
#27
,
|
|
|
Цитата inmast @ chr(8),chr(37),chr(39):; А при чем тут chr(37) - знак процента %, и chr(39) - одиночный апостроф ' Цитата inmast @ 3)Ну и стрелки назад-вперед, Стрелки назад-вперед это не символы, а управляющие клавиши. Поэтому в OnKeyPress они не попадают, только в OnKeyDown\OnKeyUp |
Сообщ.
#28
,
|
|
|
Еще вариант до кучи по мотивам темы
![]() ![]() procedure TForm1.FormCreate(Sender: TObject); var J: Integer; begin for J := 0 to ComponentCount-1 do if Components[J] is TEdit then TEdit(Components[J]).OnKeyPress := klavishi1; end; procedure TForm1.klavishi1(Sender: TObject; var Key: Char); begin if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)]) then Key := #0; end; |
Сообщ.
#29
,
|
|
|
А не проще ли глобально для всех контролов что лежат на форме обрабатывать.
У формы на которой лежат контролы делаем KeyPreview := True и вешаем обработчик на OnKeyPress ![]() ![]() procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)]) then Key := #0; end; и не заморачеваемся с перебором класов и т.д. Хотя это от ситуации зависит. |
Сообщ.
#30
,
|
|
|
Цитата SourceUser @ if not (Key in [#8 ,'-', '0'..'9', Chr(VK_DELETE), Chr(VK_LEFT), Chr(VK_UP), Chr(VK_RIGHT), Chr(VK_DOWN)]) Угу, прежде чем ерунду писать сначала попробовал бы вывести все эти символы VK_.. в едит ![]() ![]() Etit1.Text:=Chr(VK_DELETE)+Chr(VK_LEFT)+Chr(VK_UP)+Chr(VK_RIGHT)+Chr(VK_DOWN); тогда бы сразу увидел что они означают: .%&'( Повторяю для непонятливых: Цитата leo @ Стрелки назад-вперед это не символы, а управляющие клавиши. Поэтому в OnKeyPress они не попадают, только в OnKeyDown\OnKeyUp а VK_... это не коды символов, а виртуальные коды клавиш клавиатуры |