|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Пара UpDown и Edit ограничение ввода
Здравствуйте, подскажите, пожалуйста, код для ограничения ввода (с клавиатуры) в Edit (пары UpDown + Edit) так, чтобы, если вводится значение больше Max, в Edit записывалось Max, если меньше Min то значение Min, и чтобы не вводились символы и знаки.
|
#2
|
||||
|
||||
Писал для себя, но думаю поможет и тебе...
Код:
//функция фильтрации ввода function TProgramm.FilterImput (Edit : TEdit ; Key : Char) : Char ; var vr_Pos , vrPos, vrLength, vrSelStart: byte; const i: byte = 1; begin with Edit do begin vrLength := Length(Text); //определяем длину текста vrPos := Pos(',', Text); //проверяем наличие запятой vr_Pos := Pos('.', Text); //проверяем наличие запятой vrSelStart := SelStart; //определяем положение курсора end; Result := key; Case Key of '0'..'9': //если нажата цифра begin if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then result := #0; //"погасить" клавишу end; ',','.': //если нажата точка или запятая begin if (vr_Pos>0) or (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then result := #0 //"погасить" клавишу else result := '.'; //всегда заменять точку на запятую end; #8: ; //позволить удаление знаков клавишей 'Back Space' else result {Key} := #0; //"погасить" все остальные клавиши end; end; Код:
procedure TForm_ustan_alarm.UpDown_hourClick(Sender: TObject; Button: TUDBtnType); begin Label_hour.Caption := IntToStr(UpDown_hour.Position); end; procedure TForm_ustan_alarm.UpDown_minClick(Sender: TObject; Button: TUDBtnType); begin if UpDown_min.Position < 10 then Label_min.Caption := '0' + IntToStr(UpDown_min.Position) else Label_min.Caption := IntToStr(UpDown_min.Position); end; procedure TForm_ustan_alarm.UpDown_secClick(Sender: TObject; Button: TUDBtnType); begin if UpDown_sec.Position < 10 then Label_sec.Caption := '0' + IntToStr(UpDown_sec.Position) else Label_sec.Caption := IntToStr(UpDown_sec.Position); end; В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
|||
|
|||
дело в том, что я обрабатываю событие KeyPress для Edit, т.к. пользователь вводит значение с клавиатуры (правильно ли я делаю Oo), а не событие нажатия кнопок UpDown.
|
#4
|
||||
|
||||
Ты хочешь например так...
Максимальное число 100, пользователь вводит 101, Edit пишет Max??? Обработай это после потери компонентом фокуса...т.е. как только курсор уйдет с поля ввода, цифры заменятся Max/Min... Или по событию KeyPress... Код:
if StrToInt(Edit.Text)> 100 then Edit.Text := 'Max'; В начале был Бит, потом Байт и только потом появилось Слово... |
#5
|
|||
|
|||
А числа можно вводить любые или только целые? Нельзя использовать SpinEdit?
|
#6
|
|||
|
|||
2 Nich:
хорошая идея про потерю фокуса, спасибо 2 Kapitoshka: да, числа только целые, SpinEdit нельзя, потому что потом мне нужно обрабатывать события нажатия кнопок вверх-вниз, у SpinEdit я таких не нашла. |
#7
|
|||
|
|||
Чтобы можно было нажимать только цифры:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9', '-', #8]) then Key := #0; // '-' можно убрать, если не нужно end; Код:
procedure TForm1.Edit1Exit(Sender: TObject); var Value: Integer; begin TryStrToInt(Edit1.Text, Value); if Value < UpDown1.Min then Edit1.Text := IntToStr(UpDown1.Min) else if Value > UpDown1.Max then Edit1.Text := IntToStr(UpDown1.Max); end; |
#8
|
|||
|
|||
в зависимости от числа в UpDown будет заполняться таблица, и, если число выбрано, а таблица не заполнена, то менять число нельзя.
и насчет контроля попадания в интервал: хотелось бы контролировать ввод в момент ввода, а не в момент Exit.. пожалуй я откажусь от этой пары, будем действовать по-другому. Спасибо. Последний раз редактировалось Bespontovyi pirogok, 26.11.2009 в 11:33. |