проверить значение MaskEdit
как узнать ввел ли пользователь дату или нет? маска сохраняется вместе со специальными символами.
isNull не работает
сравнение Text и строки "__.__.__" вручную тоже false
изобретать велосипед совсем не хочется - подскажите, что делать? а то я уже совсем туплю.
Проблем не будет.
Для ввода даты используй TDateTimePicker.
Проблем не будет.
Ну, как сказать...
Да, конечно, Борланд заточил компонент TDateTimePicker для ввода дат. Но проблемы могут возникнуть. Например: у меня билдер 5, даты ранее 01.01.1453 ввести невозможно (впрочем, не разбирался; может быть это можно преодолеть).
Или такой вариант: делается программа для массового ввода каких-нибудь данных, например, учётных карточек и тому подобное. Оператор в таких случаях работает быстрее и допускает меньше ошибок, если в процессе набора ему не приходится смещать руку по клаве. А попробуйте ка в пикере _быстро_ ввести дату, не дёргаясь к клавишам со стрелками :)
Этот пример не взят с потолка. Обратите внимание, как набирают задание продавцы железнодорожных билетов. Щёлк, щёлк, щёлк - и дело сделано, т.к. в программе ввода не используются элементы наподобие пикера (безусловно, полезного в других условиях), а предусмотрен ввод по маске...
Попробуйте сконвертировать введённую строку в объект TDateTime с помощью StrToDateTime или ещё чего-нибудь в этом роде. Если выбрасывается исключение, или происходит ещё какая-нибудь ошибка - значит корректная дата не была введена.
так при конвертации он как раз и выкидывает исключение если в это поле дата не была введена.
а мне нужно знать если есть дата - то конвертирую в TDateTime если нет, то запрос по другому строю.
вообщем решил проблему так:
AnsiString tempb = MaskEdit1->Text.Trim();
if (tempb.Length()!=4)
{// дата введена
}
Попробуйте сконвертировать введённую строку в объект TDateTime с помощью StrToDateTime или ещё чего-нибудь в этом роде.
В последних версиях VCL есть функции типа TryStrToDate(), возвращающие булевские значения.
В последних версиях VCL есть функции типа TryStrToDate(), возвращающие булевские значения.
обана!:D в жизни не догадался бы (я видимо еще маленький). sanks!
так при конвертации он как раз и выкидывает исключение если в это поле дата не была введена.
а мне нужно знать если есть дата - то конвертирую в TDateTime если нет, то запрос по другому строю.
}
Про то и речь. Создаёте цикл по флагу, в цикле try-блок, в нём вызываете функцию преобразования, в catch'е устанавливаете флаг для повтора цикла. Или что-нибудь в этом роде. Идея в том, чтобы обеспечить или пожизненный цикл запроса ввода даты, или установить какое-то число попыток перед применением других способов задания даты.
обана!:D в жизни не догадался бы (я видимо еще маленький).
Еще у TMaskEdit есть свойство EditText.
Про то и речь. Создаёте цикл по флагу, в цикле try-блок, в нём вызываете функцию преобразования, в catch'е устанавливаете флаг для повтора цикла. Или что-нибудь в этом роде. Идея в том, чтобы обеспечить или пожизненный цикл запроса ввода даты, или установить какое-то число попыток перед применением других способов задания даты.
у меня немного другой случай, но вообще способ мнее понравился. внесу в закладки :) тоже спасибо.