![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Edit1.text как запретить вводить буквы и разрешить цифры
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]Или через обработку исключительной ситуации :)