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

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

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;


Наверх

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