| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Edit |
| Автор: Лена 29.1.2009, 18:03 |
| В Edit пользователь может вводить только значания типа: 29.01.2009 12:30:00 Как отследить после вода пользователя, что он ввел, например, буквы и предупредить об этом. Например 29.01.2009 12:30:00сс. Мне надо понять, что присутсвуют буквы любого регистра. Надо проанализировать уже после ввода пользователя, а не вовремя ввода... |
| Автор: Comm 29.1.2009, 18:11 |
| Суть вопроса в "как проверить присутсвуют ли буквы любого регистра" или "как проанализировать уже после ввода пользователя, а не вовремя ввода..." ?! |
| Автор: taiven 29.1.2009, 18:50 |
| если значения будут только типа 29.01.2009 12:30:00, то не проще ли проверять каждый символ строки на несовпадение с одним из допустимых символов? |
| Автор: Лена 29.1.2009, 18:57 | ||
Здесь будет любое дата время 11.01.2010 15:30:00 и т.п. Мне также надо отследить наличие пробела, если пользователь напишет так 11.01.201015:30:00 то предупредить его вставить пробел. |
| Автор: taiven 29.1.2009, 20:07 | ||||
ну, как вариант приблизительно так можно сделать:
|
| Автор: mrbrooks 30.1.2009, 10:11 | ||
Лена, ты как я понимаю юзаешь компоненты IntraWeb. В данном случае IWEdit. Я бы использовал класс TMask
Добавлено через 1 минуту и 14 секунд ЗЫ. Жаль что самой маски в IWEdit вроде нет. Хотя быть может она где-то и зарыта |
| Автор: Лена 30.1.2009, 11:33 | ||
Совершенно верно. Если использовать маски, то я так понимаю, мне придется делать несколько масок. Ведь дата типа 9.01.2009 12:30:00 или 29.01.2009 8:30:00 тоже корректны... Дата время введенное пользователем используется в коде так: t->ADOQuery2->Parameters->ParamByName("datastart")->Value = IWEdit1->Text; Сейчас у меня реализовано ряд проверок, но выглядит это криво:
Жаль что нет нормального компонета выбора даты времени в IntraWEB |
| Автор: mrbrooks 30.1.2009, 11:49 | ||||
не обязательно, можно и так:
Добавлено через 32 секунды |
| Автор: Лена 30.1.2009, 12:15 |
| >Edt->Text = "00.00.0000 00:00:00"; Это я так понимаю шаблон, чтобы при старте приложения пользователь его увидел? У меня заполнение этих полей происходит при первом заходе пользователя на страницу. Я по умолчанию предлагаю пользователю текущие сутки: TDateTime T(Now()); IWEdit1->Text = T.DateString() + " 0:00:00"; T = T + 1; IWEdit2->Text = T.DateString() + " 23:59:59"; Я так понимаю, в коде с TMask ничего менять не надо? А может написать так: IWEdit1->Text = T.DateString() + " 00:00:00"; Тогда принудить к жесткой маске: mask = new TMask("[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]"); Это: TMask *mask; я объявлю в классе формы т.к. в статье написано, что глобальные переменные не приветсвуются в IntraWeb. |
| Автор: mrbrooks 30.1.2009, 12:21 | ||||||
совершенно верно.
код не совсем мне ясен - но если конечная строка ровна моему шаблону то да
конечно. глобальная переменная введена чисто для примера. глобальные переменные везде зло. не только в IntraWeb |
| Автор: Лена 30.1.2009, 12:59 | ||
| Вообщем все работает как надо с маской Только оставила эту проверку также в коде:
т.к. пользователь может случайно указать что в году, например, 15 месяцев |
| Автор: mrbrooks 30.1.2009, 13:04 | ||
это запросто |