Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.11.2009, 09:08
Bespontovyi pirogok Bespontovyi pirogok вне форума
Прохожий
 
Регистрация: 15.11.2009
Сообщения: 6
Репутация: 10
Вопрос Пара UpDown и Edit ограничение ввода

Здравствуйте, подскажите, пожалуйста, код для ограничения ввода (с клавиатуры) в Edit (пары UpDown + Edit) так, чтобы, если вводится значение больше Max, в Edit записывалось Max, если меньше Min то значение Min, и чтобы не вводились символы и знаки.
Ответить с цитированием
  #2  
Старый 25.11.2009, 09:21
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Писал для себя, но думаю поможет и тебе...
Код:
//функция фильтрации ввода
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;
Посмотри мою реализацию Up/Down...установка часом, минут, секунд...
Код:
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  
Старый 25.11.2009, 09:55
Bespontovyi pirogok Bespontovyi pirogok вне форума
Прохожий
 
Регистрация: 15.11.2009
Сообщения: 6
Репутация: 10
По умолчанию

дело в том, что я обрабатываю событие KeyPress для Edit, т.к. пользователь вводит значение с клавиатуры (правильно ли я делаю Oo), а не событие нажатия кнопок UpDown.
Ответить с цитированием
  #4  
Старый 25.11.2009, 10:53
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Ты хочешь например так...
Максимальное число 100, пользователь вводит 101, Edit пишет Max???
Обработай это после потери компонентом фокуса...т.е. как только курсор уйдет с поля ввода, цифры заменятся Max/Min...
Или по событию KeyPress...
Код:
if StrToInt(Edit.Text)> 100 then
 Edit.Text := 'Max';
Но тогда пользователь не сможет стереть лишний символ, типа ввел 1000, поле поменялось на Max...и потом заново вводить...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 25.11.2009, 11:49
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

А числа можно вводить любые или только целые? Нельзя использовать SpinEdit?
Ответить с цитированием
  #6  
Старый 25.11.2009, 22:29
Bespontovyi pirogok Bespontovyi pirogok вне форума
Прохожий
 
Регистрация: 15.11.2009
Сообщения: 6
Репутация: 10
По умолчанию

2 Nich:

хорошая идея про потерю фокуса, спасибо

2 Kapitoshka:
да, числа только целые, SpinEdit нельзя, потому что потом мне нужно обрабатывать события нажатия кнопок вверх-вниз, у SpinEdit я таких не нашла.
Ответить с цитированием
  #7  
Старый 25.11.2009, 23:39
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Чтобы можно было нажимать только цифры:
Код:
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;
А можно поинтересоваться, для чего вам отлавливать событие нажатия на UpDown?
Ответить с цитированием
  #8  
Старый 26.11.2009, 11:11
Bespontovyi pirogok Bespontovyi pirogok вне форума
Прохожий
 
Регистрация: 15.11.2009
Сообщения: 6
Репутация: 10
По умолчанию

в зависимости от числа в UpDown будет заполняться таблица, и, если число выбрано, а таблица не заполнена, то менять число нельзя.


и насчет контроля попадания в интервал: хотелось бы контролировать ввод в момент ввода, а не в момент Exit.. пожалуй я откажусь от этой пары, будем действовать по-другому.

Спасибо.

Последний раз редактировалось Bespontovyi pirogok, 26.11.2009 в 11:33.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter