![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
EditKeyPress
Серый © (2007-05-03 18:29:00)Как в процедуре EditKeyPress сделать так, чтобы в поле Edit вводили торлько цифры от 1 до 20?
Kostafey (2007-05-04 12:45:00) [1]> См. http://rsdn.rsdn.ru/Forum/Message.aspx?mid=626935&only=1
Да уж. Здорово! Красиво и изящно.
Беру на вооружение :)
Leonid Troyanovsky (2007-05-04 12:00:00) [2]
> Kostafey © (04.05.07 00:13) [7]
> Выглядит дико, но работает:
На лицо ужасные, добрые внутри? ;)
Проще анализировать Val в OnChange и, например,
удалять недопустимые символы (с обязательным
уведомлением юзера).
См. http://rsdn.rsdn.ru/Forum/Message.aspx?mid=626935&only=1
--
Regards, LVT.
Германн (2007-05-04 00:55:00) [3]
> ppcumax © (04.05.07 00:39) [8]
>
> Используй SpinEdit и не парься
>
Так ты сначала сообщи автору, что в палитре компонентов в Дельфи много вкладок. И что сначала стоило бы по ним полазать и посмотреть, что в этих вкладках есть. А то многие дальше Standardникогда и не лазали. :)
ppcumax (2007-05-04 00:39:00) [4]Используй SpinEdit и не парься
Kostafey (2007-05-04 00:13:00) [5]По моему на форуме что-то подобное уже писали.
Выглядит дико, но работает:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Length((Sender as TEdit).Text)=20) then
begin
if (Key=#8) or (Key=#83) then exit;
Key:=#0;
exit;
end;
case Key of
'0'..'9', #8: ; //1-9,BackSpase -- принимаем
'-': //знак "минус"
begin
if (Pos('-',(Sender as TEdit).text)<>0)
then //разрешаем введение только одного знака "минус"
begin
Key:=#0;
exit;
end;
if (Sender as TEdit).SelStart<>0 then
begin //Проверяем стоит ли знак "минус" в начале числа
Key:=#0;
(Sender as TEdit).Text:='-'+(Sender as TEdit).Text;
(Sender as TEdit).SelStart :=Length((Sender as TEdit).text);
end;
end;
',' , '.': //разделители
begin
Key:=DecimalSeparator;//заменим разделитель на допустимый
if (length((Sender as TEdit).text)=0) or ((Sender as TEdit).text='-')
then
begin
Key:=chr(0);
(Sender as TEdit).text:=(Sender as TEdit).text+'0'+DecimalSeparator;
(Sender as TEdit).SelStart :=Length((Sender as TEdit).text);
end
else
if (Pos(DecimalSeparator,(Sender as TEdit).text)<>0)
then Key:=#0; //разрешаем введение только одного разделителя
end;
else
begin
Key := #0; //иначе символ не вводиться
end;
end;
end;
Ega23 (2007-05-03 18:53:00) [6]
> Такие варианты не подходят.Надо чтобы можно было вводить
> только цифры от 1 до 20 НЕ БОЛЕЕ!
>
Ты как, арифметику в школе изучал? В десятиричной системе счисления ЦИФР ВСЕГО 10
0, 1, 2, 3, 4, 5 , 6, 7, 8 и 9
Цифры 10 или 20 - нет.
clickmaker (2007-05-03 18:52:00) [7]TMaskEdit + EditMask
TSpinEdit + MinValue & MaxValue
наконец, просто TEdit с проверкой в своем OnExit
Серый (2007-05-03 18:47:00) [8]Такие варианты не подходят.Надо чтобы можно было вводить только цифры от 1 до 20 НЕ БОЛЕЕ!
Ega23 (2007-05-03 18:39:00) [9]цифр всего 10.
RomanLN (2007-05-03 18:37:00) [10]procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ;
#8 : ;
else Key :=Chr(0);
end;
end;
clickmaker (2007-05-03 18:36:00) [11]if not (Key in ['0'..'9', #8]) then Key := #0;