![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ограничение ввода
фыва © (2007-10-23 11:55:00)Всем доброо времени суток.
Подскажите, пожалуйста, как мне ограничить ввод символов в едит только числами
пишу в OnPressKey:
if not Key in ('0'..'9') then Key := #0;
ругается.
Заранее благодарен.
Kolan (2007-10-24 08:41:00) [1]> StrToFloat. В защищенном блоке try catch
Есть же TryStrToFloat
Галинка (2007-10-24 00:44:00) [2]У меня в случае ввода цифровфх данных была проверка на возможность StrToFloat. В защищенном блоке try ... catch ... EConvertException. И стояло это в OnLeave Edit'а. Работало безотказно.
Leonid Troyanovsky (2007-10-23 19:53:00) [3]
> Ins © (23.10.07 19:11) [41]
> > Хотя, возможно, что для некоего грида игра и может стоить
> Это тоже есть :)
Ну, и славно.
Значит, отдыхаем, тем более, что футбол.
--
Regards, LVT.
Ins (2007-10-23 19:11:00) [4]
> Хотя, возможно, что для некоего грида игра и может стоить
> свеч.
Это тоже есть :) В библиотеке TMS. Там можно предоставлять собственный редактор для ввода значений в ячейки или использовать один из нескольких десятков уже готовых.
Amoeba (2007-10-23 18:22:00) [5]Кстати, давно есть качественные готовые компоненты-наследники с нужной функциональностью. Если и не использовать готовые, так хотя бы исходники посмотреть стоит.
Leonid Troyanovsky (2007-10-23 18:10:00) [6]
> Ins © (23.10.07 16:19) [38]
> Все уже написано. :) Ссылку я привел. Там в обсуждении статьи
> Shabal именно такой компонент выложил. Да и вообще в интернете
> полно таких компонентов.
Уговорил :) Не буду, уж больно скучны все эти ffFixed.
> А считаю, что писать класс нужно вместо обвешивания TEdit
> или TMemo обработчиками событий по следующим банальным причинам:
Ну, а считаю, что тот, кому нужно, может и сам сделать Change; override.
И добавить по-вкусу выравнивание - не квадратный трехчлен.
Моя идея была: обработка всех изменений и специального исключения,
ее работоспособность продемонстрирована даже не на собственном Edit,
а остальное - оставлю тому, кому это интересно.
> Kolan © (23.10.07 16:15) [37]
> И еще, а может сделать эдит с неким интерфейсом, а конкретные
> проверки завернуть в объект и подключать к эдиту. Ведь TFloatEdit
> нужет не реже :)…
С Float, как раз, все просто: Val что передадут, то и будет.
А вот бизнес-компонент, конечно, интересней б было представить,
но, пока не очень ясно, стоит ли его интегрировать с обычным Edit,
а делать специализированный контрол не очень хочется.
Хотя, возможно, что для некоего грида игра и может стоить свеч.
--
Regards, LVT.
Ins (2007-10-23 16:19:00) [7]
> Ладно уж, напишу дома TNumberEdit = class(TEdit),
> с правым выравниванием.
Все уже написано. :) Ссылку я привел. Там в обсуждении статьи Shabal именно такой компонент выложил. Да и вообще в интернете полно таких компонентов.
А считаю, что писать класс нужновместо обвешивания TEdit или TMemo обработчиками событий по следующим банальным причинам:
1. Наверняка ведь понадобится не в одном проекте. А раз так, то проще один раз написать, а потом просто кидать компоненты на форму, чем по десять раз переписывать одни и те же обработчики событий.
2. В случае обработчиков событий нет никакой модульности. Только захламляется модуль формы.
Kolan (2007-10-23 16:15:00) [8]> Ладно уж, напишу дома
Поделитесь?
А добавтьте туда события, тобы можно было информировать пользователя о том что именно не так.
И еще, а может сделать эдит с неким интерфейсом, а конкретные проверки завернуть в объект и подключать к эдиту. Ведь TFloatEdit нужет не реже :)
Leonid Troyanovsky (2007-10-23 16:09:00) [9]
> Anatoly Podgoretsky © (23.10.07 15:54) [33]
> Победил, только тяжело.
Ладно уж, напишу дома TNumberEdit = class(TEdit),
с правым выравниванием.
В фак-то хоть включат? :)
--
Regards, LVT.
Kolan (2007-10-23 15:59:00) [10]Понять что ввел не правильно пользователь долже доsubmit, даже если этот submit не заметен по времени.
Вспмните «тупые» сайты, введя в который ник и еще кучу араметров жмёш сабмит, ждёшь, а потом «ой такой ник уже занят» и половина полей пустая(снова вводить).
Так вот настольное приложение тут ничем не отличается от сайта. И если я в поле «Возраст» ввожу «Колян», мне олжнв об этом тут же сообщить, но не прерывая мою работу(то есть MessageBox фтопку).
Я и скайп например сообщают внизу поля ввода строкой с 7 шрифтом и с красным цветом. (Иногда «вылезает» собщение из под заголовка формы ) и пока нормально не введешь submit сделать нельзя.
короче ради примера можно посмотреть инсталлер скайпа.
if not Key in ['0' '9'] then Key := #0;
А стирать как? Хде #8?
Если этот код в OnKeyPress, то надо все равно сообщать что введены не те символы, иначе не понятно что не так
Anatoly Podgoretsky (2007-10-23 15:55:00) [11]
> Ins © (23.10.07 15:47) [32]
Но процитировал по адресу, автору.
Anatoly Podgoretsky (2007-10-23 15:54:00) [12]> Leonid Troyanovsky (23.10.2007 15:35:28) [28]
Победил, только тяжело.
Ins (2007-10-23 15:47:00) [13]
> Выровнять по правому краю.
М'сье понимает толк в извращениях :)) (Это не наезд, это шутка)
Leonid Troyanovsky (2007-10-23 15:44:00) [14]
> Ins © (23.10.07 15:40) [29]
> А зачем? :)))
Выровнять по правому краю.
--
Regards, LVT.
Leonid Troyanovsky (2007-10-23 15:42:00) [15]
> Ins © (23.10.07 15:24) [27]
> > Там нынче уже STATIC, IMHO.
>
> Только что попробовал - получилось. WinXP. Оконный класс
> - 'Edit'
Мда.. Попутал, это раньше был STATIC (даже пара).
Sorry.
--
Regards, LVT.
Ins (2007-10-23 15:40:00) [16]
> Снабдим TMemo высотой в одну строку, taRightJustify,
> обработчиком OnChange и вуа-ля!
А зачем? :)))
Leonid Troyanovsky (2007-10-23 15:35:00) [17]
> Ins © (23.10.07 15:03) [23]
> ИМХО, выравнивание текста по правому краю неплохо намекает
> на то, что это для цифр.
Снабдим TMemo высотой в одну строку, taRightJustify,
обработчиком OnChange и вуа-ля!
Я победил :)
--
Regards, LVT.
Ins (2007-10-23 15:24:00) [18]
> Там нынче уже STATIC, IMHO.
Только что попробовал - получилось. WinXP. Оконный класс - 'Edit'
Leonid Troyanovsky (2007-10-23 15:17:00) [19]
> Ins © (23.10.07 15:06) [25]
> > и прямой ввод туда, во-ще, заказан.
> Вроде бы как можно.
Там нынче уже STATIC, IMHO.
--
Regards, LVT.
Ins (2007-10-23 15:06:00) [20]
> Ins © (23.10.07 15:03) [23]
И пусть в этом поле сразу же по умолчанию стоит какое-либо значение, например 0, а ввод пустой строки автоматически на 0 заменяется.
> и прямой ввод туда, во-ще, заказан.
Вроде бы как можно.