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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в Edit1.text вводить только число. 
:(
    Опции темы
ConstantinXXX
  Дата 14.6.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 27.5.2006
Где: U.S.A. :-)

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



Как отсеивать только числа. При вводе. Или запритить ввод букв. smile  
--------------------
Как вы относитесь к девушкам, которые курят сигареты?Как не ослепнуть за компьютером© ORENCODE.info
PM MAIL WWW   Вверх
Mal Hack
Дата 14.6.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



В OnKeyPress
Код
 if NOT (key in ['0'..'9',#45,#44])  then
   key:=#0;

Ну а если серьезнее, то в Onchange пытаемся сделать преобразование, если ошибка - возвращаем старое значение, которое при успешном преобразовании устанавливаем. 
PM ICQ   Вверх
Friackazoid
Дата 14.6.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В onchande лучше не делать, потому что это может привести к нежелательным результатам а вот OnClick хорошо может получиться. Тут если немного извратиться вообще можно  сделать универсальный обработчик исключений, если проверок всяких разный много, ведь наверняка дробное число должно быть коректным, то обработчик исключений самое то. 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 14.6.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



На сколько я помню, OnClick выовется в других случаях.... 
PM ICQ   Вверх
Friackazoid
Дата 14.6.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Mal Hack
Я имею ввиду он клик по той кнопке которая запускает код для обработки этих данных. 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
ivan219
Дата 14.6.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот процедура которая разрешает только ввод-выводит цыфр.
Код

Procedure TForm1.EditChange(Sender: TObject);
var
Text: String;
SelStart: Integer;
begin
 EditCh(TLabeledEdit(Sender).Text,TLabeledEdit(Sender).SelStart,Text,SelStart);
 TLabeledEdit(Sender).Text:=Text;
 TLabeledEdit(Sender).SelStart:=SelStart;
end;


Код

{Процедура ограничения в вода в Edit с преобразованием '.' в ',' ('0..9',',','.','E','+','-')}
Procedure EditCh(TextIn:String; SelStartIn:Integer; var Text:String; SelStart:Integer);
const WrongSepArr : array[0..1] of char =('.',','); //создаём константу - массив для хранения символов, которые надо преобразовать в разделитель

Var
  CurStr: String;
  Counter,SelPos,SeparatorPos  :Integer;
begin
  SelPos:=SelStartIn; //положение курсора
  CurStr:=PChar(TextIn);//Текст из эдита, который изменён
  if length(curStr)<1 then Exit; //Проверка длины
  for counter := 0 to 1 do  //Перечисление по массиву
    if WrongSepArr[counter]<> DecimalSeparator then
      While Pos(WrongSepArr[counter],CurStr)>0 do   //ищем данный элемент масива в тексте
        CurStr[Pos(WrongSepArr[counter],CurStr)]:=DecimalSeparator;//Заменяем на сепаратор
  SeparatorPos:=Pos(DecimalSeparator,CurStr); //Ищем первый сепаратор
  for Counter:= Length(CurStr) downto 2 do  //Перечисление по строке от конца до 2 элемента (обратный, т.к. может быть удалены символы и как следствие - уменьшина длина)
   Begin
    if (curStr[Counter] in [DecimalSeparator])and(Counter=SeparatorPos) then //если сепаратор и он не первый
        curStr[Counter] := DecimalSeparator  //удаляем
    else
      if not (curStr[Counter] in ['0'..'9','E','e','-','+']) then    //иначе ели не разрешённый символ
       Begin
        Delete(CurStr,counter,1);  //удаляем
        dec(SelPos); //Уменьшить на 1
       End;
  End;
  if (curStr[1] in [DecimalSeparator])and(SeparatorPos=1) then //Если первый знак . или , то поставить 0,
  Begin
    curStr[1]:=DecimalSeparator;
    insert('0',curStr,0);
    inc(SelPos); //Увеличить на 1
  End;
  if (curStr[length(curStr)]='E')or(curStr[length(curStr)]='e') then //Если последний символ E
      Delete(CurStr,length(curStr),1);  //Удалить
  if (curStr[length(curStr)]='-')or(curStr[length(curStr)]='+') then //Если последний символ знак
      Delete(CurStr,length(curStr),1);  //Удалить
  if length(curStr)>=2 then //Если длина больше 1
    if (curStr[1] in ['+','-'])and(curStr[2] in [DecimalSeparator]) then  //Если первый символ знак
      Begin
       insert('0',curStr,2); //Вставить 0 вторым символом
       inc(SelPos);  //Увеличить на 1
      End;
  if not (curStr[1] in ['0'..'9','+','-']) then   //Если первый сивол запрещён
   Delete(CurStr,1,1); //Удалить
  While (length(curStr)>=2)and(curStr[1]='0')and(curStr[2]<>DecimalSeparator)do //удалить нули в начале числа
   delete(CurStr,1,1); //Удалить
  While (length(curStr)>=3)and(curStr[1]in['+','-'])and(curStr[2]='0')and(curStr[3]<>DecimalSeparator)do //удалить нули в начале числа, если первый символ - знак
   delete(CurStr,2,1); //Удалить
  Text:=CurStr;  //Результат
  SelStart:=SelPos;  //Результат
end;
 
PM MAIL ICQ   Вверх
Lence
Дата 14.6.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


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

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



А я так выходил из положения

Код


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9'])  then
  begin
     if not (Key= #13) then
        begin
          if not (Key= #8) then
            begin
              Key := #27;
            end;
        end;
    end;
 end;
 
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
ConstantinXXX
Дата 15.6.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 27.5.2006
Где: U.S.A. :-)

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



Спасибо всем smile . Алгоритмов конечно много. Но необходим самый простой. 
--------------------
Как вы относитесь к девушкам, которые курят сигареты?Как не ослепнуть за компьютером© ORENCODE.info
PM MAIL WWW   Вверх
skyboy
Дата 15.6.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(ConstantinXXX @  15.6.2006,  00:27 Найти цитируемый пост)
Алгоритмов конечно много. Но необходим самый простой. 

Stanard -> MaskEdit.
 
PM MAIL   Вверх
Rrader
Дата 15.6.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

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



Код

SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) Or ES_NUMBER);
 


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Poseidon
Дата 15.6.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Вот такой пример во всех учебниках присутствует:

Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
  '0'..'9':;
  #13:;
  #8:;
  else key:= chr(0);
  end;
end;


Правда у этого примера есть минус. Он не спасает от ввода из буфера  

Это сообщение отредактировал(а) Poseidon - 15.6.2006, 19:41


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Mal Hack
Дата 15.6.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(skyboy @  15.6.2006,  01:40 Найти цитируемый пост)
Stanard -> MaskEdit.

Это бабушка на двое сказала... Там все-таки маска, а не формат. 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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