Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Edit1.text как запретить вводить буквы и разрешить цифры


Страницы:   1 2 3

Officeman ©   (2005-11-19 22:20:00) 

есть несколько Edit-ов. пользователь вводит в них ЦИФЕРНЫЕ значения.
Таймер подсчитывает эти значения(суммирует).

вот как бы ОГРАНИЧИТЬ ввод БУКВ.

или в Таймере сделать проверку ЕСЛИ это 'буква' то showmessage('error');

???


Separator   (2005-11-20 13:51:00) [21]

Вот блин.

используйте тогда StrToIntDef(Edit1.Text, 0)

Тогда вообще ничего не нужно использовать, если в TEdit1.Text будет не число, то в результате вернется 0


Officeman   (2005-11-20 13:33:00) [22]

to Developerr, согласен  RxCalcEdit  и ... ! вещи замечательная. но кому как . быстрее вручную ввести. чем нажимать дополнительно кнопки. конечно зато все баги уходят... хм. подумаю. .. rxlib стоит давно. я и забыл что у него есть аткой компонент.

to Separator, я не вывожу ошибку на экран. я ставлю edit2.text:='0';
чтобы исключить ошибку при

Тут i:=StrToInt(Edit1.Text), так как в Edit1 может быть и не число.


Developerr   (2005-11-20 13:22:00) [23]

Проще всего установить Библиотеку RX или Jedi VCL и воспользовать компонентом RxCalcEdit или JvCalEdit и будет Вам счастье.


Anton_K   (2005-11-20 13:03:00) [24]


> Во первых найдите пользователя, которому нравится нажимать
> на кнопку Ok во всяких окошках об ошибках

Если эти ошибки обрабатывать в try...except, то никаких окошек не будет.


Anton_K   (2005-11-20 13:01:00) [25]


> А где здесь опасный участок?

Тут i:=StrToInt(Edit1.Text), так как в Edit1 может быть и не число.


Separator   (2005-11-20 12:53:00) [26]

С помощью зарезервированных слов try(попробовать), except(исключение) и endреализуется так называемый защищенный блок. Такими блоками программист может защитить программу от краха при выполнении потенциально опасного участка

А где здесь опасный участок?


Separator   (2005-11-20 12:41:00) [27]

нет

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


Oni   (2005-11-20 12:33:00) [28]

[13]
Больше кода... а результат тот-же,
я думаю автору важнее получить результат,
а не беспокоится о надежности программы, которая
имхо из-за использования try...exceptстанет только
стабильней.


Separator   (2005-11-20 08:40:00) [29]

[10 ]НЕЛЬЗЯ ТАК ДЕЛАТЬ!!!!!!!!!!!!!!

Зачем плодить лишние исключительные ситуации?

И вообще старайтесь try ... except использовать только в процессе отладки, правильно работающая программа не должна генерировать исключения.

Вот, по моему, одно иг правильных решений:


procedureTForm1.Edit1KeyPress(Sender: TObject; varKey: Char);
var
   i: Integer;
begin
    if not(Key in[ #48..#57, #8, '.', ','])
        thenKey:= #0
        else ifKey in['.', ','] then begin
           Key:= DecimalSeparator;
            fori:= 1 toLength((Sender as TEdit).Text) do
                if(Sender as TEdit).Text[i] = Key then begin
                   Key:= #0;
                   Break
               end
       end
end;


Officeman   (2005-11-20 01:11:00) [30]

да не, номер [10] - ништяк работает. Багов нет.
а если пользователь вводит БУКВУ я даю:  
ShowMessage('Тут ЦИФРА нужна');
и возвращаю
Edit2.text:='0';  //ноль


Сайбель Алексей   (2005-11-20 00:44:00) [31]

2 Officeman [9]

> Только всё равно ОДНА  БУКВА вводится

Добавь в код как было в [5] then key:=#0.

В целом вижу полное не понимание сути:
Во первых не использйте try except end;
То, что написано в Oni [8] полная ерунда.
Во вторых сообщение об ошибке не удобно для пользователся -  лучше предотвращать появление самой ошибки, просто используй [5].

Как я понял по сабжу - сложение из едитов происходит по таймеру, что тоже полнейшая ересь.

Читайте книги, в них знания.


Officeman   (2005-11-20 00:31:00) [32]

TO        ONI            - GOOD     IDEA    


procedure TForm2.Edit2Change(Sender: TObject);
begin
try
if i=StrToInt(Edit2.Text) then begin
end;
except ShowMessage('Error')
end;
end;


Officeman   (2005-11-20 00:21:00) [33]

=))))))

to Oni,  хорошая шутка.

to Сайбель Алексей
в общем и целом она работает. НОООООООООО

Только всё равно ОДНА  БУКВА вводится, и после этого ничего недаёт вводить. я продовал ставить и edit.clear;  =) всё равно одна буква остаётся.


Oni   (2005-11-20 00:09:00) [34]


try
 i:=StrToInt(Edit1.Text);
 except ShowMessage('Error')
end;


Сайбель Алексей   (2005-11-20 00:09:00) [35]


> все коды проверять?  

Это вопрос мне?
Из поставленно задачи:

> вот как бы ОГРАНИЧИТЬ ввод БУКВ.

Ответ на нее: Сайбель Алексей © [5]
OnKeyPress
if not (key in [ #48..#57,#8,',','.'])//если вводимый символ не цифра от 0..9, либо Backspace, либо . ,
  then //тогда что угодно, хотьб ShowMessage('Разрешен ввод только цифр!') хотя это не удобно с точки зрения пользователя


Officeman   (2005-11-20 00:04:00) [36]

=)))))))

все коды проверять?  я попробую только цифры проверять.
или сделаю на форме дополнительные кнопки (вверх,вниз) для выбора цифрового значения.


Сайбель Алексей   (2005-11-19 23:58:00) [37]

У тебя таймер каждый отрезок времени проверяет значения в эдитах и суммирует их??

Для того, чтобы ограничить ввод букв, нужно посадить проверку на событие OnKeyPress у TEdit'a, которое обрабатывается при нажатие клавиши в эдите
 if not (key in [ #48..#57,#8,',','.'])
   then key:=#0


Officeman   (2005-11-19 23:56:00) [38]

to Oni,  нет это неподходит!

to Дева, канечно я думал об этом

на событии  TEdit.onChange

Хотелось бы прописать так

если     edit1.text    есть БУКВА тогда  SHOWMESSAGE ОШИБКА

как написать, правильно сравнить что 'это текст или это не текст'

if  edit1.text=Char(256) then

;)    ?????????????????????????????????


Oni   (2005-11-19 23:55:00) [39]

Тогда уж лучше введённый текст на цифры-буквы проверять


Дева   (2005-11-19 23:22:00) [40]

Или через обработку исключительной ситуации :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо