![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте, подскажите, пожалуйста, код для ограничения ввода (с клавиатуры) в 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 я таких не нашла. |