Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проверить значение MaskEdit

2.1K
14 июня 2005 года
greyich
117 / / 02.02.2005
как узнать было ли чтото введено в MaskEdit или нет. по умолчанию настроена стандартная маска ввода даты, то есть "__.__.__".

как узнать ввел ли пользователь дату или нет? маска сохраняется вместе со специальными символами.

isNull не работает
сравнение Text и строки "__.__.__" вручную тоже false

изобретать велосипед совсем не хочется - подскажите, что делать? а то я уже совсем туплю.
310
14 июня 2005 года
fellow
853 / / 17.03.2003
Что-то не пойму. А разве это маска для даты? В хелпе что написано?
Цитата:
The _ character automatically inserts spaces into the text. When the user enters characters in the field, the cursor skips the _ character.

2.1K
15 июня 2005 года
greyich
117 / / 02.02.2005
я не точно выразился - я пытался сравнивать с " . . "
310
15 июня 2005 года
fellow
853 / / 17.03.2003
Попробуйте сконвертировать введённую строку в объект TDateTime с помощью StrToDateTime или ещё чего-нибудь в этом роде. Если выбрасывается исключение, или происходит ещё какая-нибудь ошибка - значит корректная дата не была введена.
2.3K
15 июня 2005 года
ART-CODE
134 / / 15.11.2004
Для ввода даты используй TDateTimePicker.
Проблем не будет.
310
15 июня 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by ART-CODE
Для ввода даты используй TDateTimePicker.
Проблем не будет.


Ну, как сказать...
Да, конечно, Борланд заточил компонент TDateTimePicker для ввода дат. Но проблемы могут возникнуть. Например: у меня билдер 5, даты ранее 01.01.1453 ввести невозможно (впрочем, не разбирался; может быть это можно преодолеть).

Или такой вариант: делается программа для массового ввода каких-нибудь данных, например, учётных карточек и тому подобное. Оператор в таких случаях работает быстрее и допускает меньше ошибок, если в процессе набора ему не приходится смещать руку по клаве. А попробуйте ка в пикере _быстро_ ввести дату, не дёргаясь к клавишам со стрелками :)

Этот пример не взят с потолка. Обратите внимание, как набирают задание продавцы железнодорожных билетов. Щёлк, щёлк, щёлк - и дело сделано, т.к. в программе ввода не используются элементы наподобие пикера (безусловно, полезного в других условиях), а предусмотрен ввод по маске...

2.1K
16 июня 2005 года
greyich
117 / / 02.02.2005
Цитата:
Originally posted by fellow
Попробуйте сконвертировать введённую строку в объект TDateTime с помощью StrToDateTime или ещё чего-нибудь в этом роде. Если выбрасывается исключение, или происходит ещё какая-нибудь ошибка - значит корректная дата не была введена.


так при конвертации он как раз и выкидывает исключение если в это поле дата не была введена.
а мне нужно знать если есть дата - то конвертирую в TDateTime если нет, то запрос по другому строю.

вообщем решил проблему так:

AnsiString tempb = MaskEdit1->Text.Trim();
if (tempb.Length()!=4)
{// дата введена
}

10
16 июня 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by fellow
Попробуйте сконвертировать введённую строку в объект TDateTime с помощью StrToDateTime или ещё чего-нибудь в этом роде.


В последних версиях VCL есть функции типа TryStrToDate(), возвращающие булевские значения.

2.1K
16 июня 2005 года
greyich
117 / / 02.02.2005
Цитата:
Originally posted by Freeman
В последних версиях VCL есть функции типа TryStrToDate(), возвращающие булевские значения.



обана!:D в жизни не догадался бы (я видимо еще маленький). sanks!

310
16 июня 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by greyich
так при конвертации он как раз и выкидывает исключение если в это поле дата не была введена.
а мне нужно знать если есть дата - то конвертирую в TDateTime если нет, то запрос по другому строю.
}


Про то и речь. Создаёте цикл по флагу, в цикле try-блок, в нём вызываете функцию преобразования, в catch'е устанавливаете флаг для повтора цикла. Или что-нибудь в этом роде. Идея в том, чтобы обеспечить или пожизненный цикл запроса ввода даты, или установить какое-то число попыток перед применением других способов задания даты.

10
16 июня 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by greyich
обана!:D в жизни не догадался бы (я видимо еще маленький).


Еще у TMaskEdit есть свойство EditText.

2.1K
16 июня 2005 года
greyich
117 / / 02.02.2005
Цитата:
Originally posted by fellow
Про то и речь. Создаёте цикл по флагу, в цикле try-блок, в нём вызываете функцию преобразования, в catch'е устанавливаете флаг для повтора цикла. Или что-нибудь в этом роде. Идея в том, чтобы обеспечить или пожизненный цикл запроса ввода даты, или установить какое-то число попыток перед применением других способов задания даты.



у меня немного другой случай, но вообще способ мнее понравился. внесу в закладки :) тоже спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог