Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как ограничить ввод в текстовое поле? 
:(
    Опции темы
myxa_0
Дата 8.6.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 18.1.2007

Репутация: нет
Всего: нет



Необходимо чтобы в текстовое поле можно было ввести только число не меньше 0 и не больше 60.
Ввод производится с клавиатуры.
PM MAIL   Вверх
Savek
Дата 8.6.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: нет
Всего: 7



Как вариант - в событии OnChange анализируй введенное значение и при необходимости меняй на значение по умолчанию
PM MAIL   Вверх
Snowy
Дата 8.6.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вместо едита используй SpinEdit
PM MAIL   Вверх
Rodman
Дата 8.6.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

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;


Это сообщение отредактировал(а) Rodman - 8.6.2007, 13:41
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Burka
Дата 8.6.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



можно в событии OnKeyPress по условию менять код нажатой клавиши на Key=#0(то есть не нажата кнопка) 


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
lukas
Дата 8.6.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15





Код

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;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Sunvas
Дата 8.6.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



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


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
lukas
Дата 8.6.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Sunvas, 

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

Это сообщение отредактировал(а) lukas - 8.6.2007, 22:06


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Sunvas
Дата 8.6.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



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. А кроме того вставить текст можно кучей способов!


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ivan219
  Дата 9.6.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Код

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

Это сообщение отредактировал(а) ivan219 - 9.6.2007, 09:43
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.