Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как ограничить ввод в текстовое поле?


Автор: myxa_0 8.6.2007, 12:28
Необходимо чтобы в текстовое поле можно было ввести только число не меньше 0 и не больше 60.
Ввод производится с клавиатуры.

Автор: Savek 8.6.2007, 13:30
Как вариант - в событии OnChange анализируй введенное значение и при необходимости меняй на значение по умолчанию

Автор: Snowy 8.6.2007, 13:34
Вместо едита используй SpinEdit

Автор: Rodman 8.6.2007, 13:38
Код

procedure TForm1.Edit1Change(Sender: TObject);
var i:Integer;
begin
  if(TryStrToInt(Edit1.Text, i)=false)then
    ShowMessage('Введено не число!!!')
  else if ((TryStrToInt(Edit1.Text, i)=true) and ((i<0) or (i>60)))then
    ShowMessage('Введено не правильное число!!!');
end;

Автор: Burka 8.6.2007, 13:41
можно в событии OnKeyPress по условию менять код нажатой клавиши на Key=#0(то есть не нажата кнопка) 

Автор: lukas 8.6.2007, 16:44


Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
    blok:boolean;
begin

if length(TEdit(Sender).text)>60 then blok:=true;

if blok then
 
 case key of
 #13,#8:;
 else key:=#0;
 end;

end;

Автор: Sunvas 8.6.2007, 21:55
Ребята, делать из Эдита конфету в этом случяе не есть хорошо. Вам же уже Snowy, сказал, что SpinEdit будет лучшим решением.
Конечно, можно написать кучу кода в OnChange и OnKeyPress, но тогда уже и стоит подумать о вставке через буфер обмена. А это не одна строка кода. Так зачем усложнять себе жизнь?

Автор: lukas 8.6.2007, 22:01
Sunvas, 

между прочим применив мой код, ничего вставкой не вставишь....  (CTRL+V), только кнопкой "Вставить"

Автор: Sunvas 8.6.2007, 22:15
lukas, вставил. smile  smile  Тестить код надо прежде, чем публиковать.

Цитата(lukas @  8.6.2007,  16:44 Найти цитируемый пост)
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);    
    var    
    blok:boolean;    
begin    
if length(TEdit(Sender).text)>60 then blok:=true;    
if blok then    
  
 case key of    
 #13,#8:;    
 else key:=#0;    
 end;    
end;

Давай разберемся, что ты делаешь. Гм, переменная blok, да еще и булевая. Так-так.. Если длина текста больше 60 то переменной присваивается истина. Интересно, а что будет если длина текста меньше 60? Чему там у нас равны неинициализированные переменные?
Идем дальше. Ага, если кнопка не энтер и не BackSpace, значит key:=0 т.е. ничему не равна. 
Смысл кода ащще не ясен.
Да и вообще, стоит помнить, что сочитание типа Ctrl+Insert не отлавливается OnKeyPress. А кроме того вставить текст можно кучей способов!

Автор: ivan219 9.6.2007, 09:37
Код

var
  Form1: TForm1;
  FBlock: Boolean;
.
.
.
.
procedure TForm1.Edit1Change(Sender: TObject);

var
  CurStr: String;
  Counter, SelPos: Integer;
begin
  if FBlock then Exit;
  FBlock:=True;

  SelPos:=TEdit(Sender).SelStart; //положение курсора
  CurStr:=TEdit(Sender).Text;//Текст из эдита, который изменён

  // Удалить все ненужное .....................................................
  for Counter:=Length(CurStr) downto 1 do
   if not (CurStr[Counter] in ['0'..'9']) then
    begin
     Delete(CurStr,Counter,1); //удаляем
     Dec(SelPos); //Уменьшить на 1
    end;
  // ...........................................................................

  // Удалить нули в начале числа ..............................................
  while (Length(CurStr)>=2)and(CurStr[1]='0')do
   Delete(CurStr,1,1); //Удалить
  // ..........................................................................

  // Если пусто поставить "0" .................................................
  if CurStr='' then //Если текста нет
   begin
    TEdit(Sender).Text:='0';     //Поставить 0
    TEdit(Sender).SelStart:=1;  //Отвести курсор на 1
    FBlock:=False;
    Exit;          //Выйти
   end;
  // ..........................................................................

  if StrToInt(CurStr)>60 then CurStr:='60'; //Ограничиваем по верхней границе

  TEdit(Sender).Text:=CurStr;  //Результат
  TEdit(Sender).SelStart:=SelPos;  //Результат
  FBlock:=False;
end;

У Edit свойство MaxLength ставим 2

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)