![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Формат даты [D7, XP]
Mery © (2007-09-27 09:38:00)Как добиться того, чтобы после ввода в поле с EditMask:=!99/99/00;1;_ нужных данных автоматически подставлялись две первые цифры года? Это возможно, если задана маска ввода?
Malik (2007-09-28 14:04:00) [1]Я не читал, может уже кто-то сказал... Брось это.... А тебе чем не угодил компонент типа TDateTimePicker
Leonid Troyanovsky (2007-09-28 12:48:00) [2]
> Mery (27.09.07 14:48) [12]
> А TDateTimePicker очень-очень-очень не удобно для ввода.
Это заблуждение.
Прикинем объем клав. ввода:
В 22% случаев количество нажатий совпадает с вводом
по формату ddmmyy (до 2009 года кол-во даже меньше).
Кроме того, нажатия отличаются по смыслу: числовые клавиши -
формирование данных, а стрелка - подтверждение ввода.
Оставшиеся 78% - это одно доп. нажатие, но
много доп. возможностей: например, 13 месяц не
получится никогда, как и 32 день, как и 29.02 в не високосный год.
Самое приятное, что для этого не нужно ни строки кода.
Ну, и дополнительный бонус: сам выпадающий календарь.
А если проявлять сверзаботу о юзере, то надо смотреть,
что за даты вводятся. Если, например, из одного года,
то стоит выделить год в отдельное поле и, возможно,
задизайблить его (оставив горячую клавишу для enable).
Аналогично месяц, на этот раз - combobox, и т.д.
--
Regards, LVT.
{RASkov} (2007-09-27 16:56:00) [3]> [22] Anatoly Podgoretsky © (27.09.07 16:53)
Я понял уже.... спасибо.
Anatoly Podgoretsky (2007-09-27 16:53:00) [4]> {RASkov} (27.09.2007 16:50:20) [20]
Желательно, поскольку потом надо обратно преобразовать в строку или выдать сообщение пользователю.
А у тебя ничего не вижу, кроме ошибок.
{RASkov} (2007-09-27 16:52:00) [5]> TryStrToDate?
Тьфу... блин прочитал как TryStrToInt....)
{RASkov} (2007-09-27 16:50:00) [6]> [19] Anatoly Podgoretsky © (27.09.07 16:35)
> Проверки нужны на допустимость
Ну дык и у меня, в примере выше, об этом не забыто :)
Или прямо-таки обязательно нужно TryStrToDate?
Anatoly Podgoretsky (2007-09-27 16:35:00) [7]> {RASkov} (27.09.2007 16:17:18) [18]
Проверки нужны на допустимость, например TryStrToDate
{RASkov} (2007-09-27 16:17:00) [8]> Определяется инструкцией, все отклонения считаются ошибкой
Тогда вообще никаких проблем :) Все просто....
Например: Строка после ввода пользователем должна иметь длину 6 символов
после 2 символа вставляем '/' т.е. текущий разделитель в дате....
var S: String;
begin
S:=Edit1.Text;
try
Insert(DateSeparator, S, 3);
Insert(DateSeparator, S, 6);
try
if StrToInt(Copy(S, 7, 2))>29 then Insert('19', S, 7) else Insert('20', S, 7)
except
S:='ERROR DATE';
end;
finally
Edit1.Text:=S;
end;
end;
:)
Anatoly Podgoretsky (2007-09-27 15:35:00) [9]> {RASkov} (27.09.2007 15:21:16) [16]
Определяется инструкцией, все отклонения считаются ошибкой
{RASkov} (2007-09-27 15:21:00) [10]Все не так сложно, если не один момент
При вводе пользователем вот такой строки
121176
Как ее рассматривать
1/2/1176
или
12/11/76
и еще есть "моменты" наподобие этого... А кроме этого ничего сложного нет :)
А вот так - 1276 - что думать? Пользователь ошибся или ввел верно?
Washington (2007-09-27 15:02:00) [11]
> Mery (27.09.07 14:18) [9]
Обычная работа со строкой ИМХО
Anatoly Podgoretsky (2007-09-27 15:00:00) [12]
> А TDateTimePicker очень-очень-очень не удобно для ввода.
Тоже так считаю, еще куда не шло в пределах текущего метода, а чуть дальше и пользователь уже теряется или производит много лишних действий.
Anatoly Podgoretsky (2007-09-27 14:58:00) [13]> Mery (27.09.2007 14:46:11) [11]
Ну так и форматируй при выходе, а насчет удобства тут надо психологию менять, реализация MaskEdit в Дельфи отвратительная, неудобная для пользователя.
Mery (2007-09-27 14:48:00) [14]clickmaker © (27.09.07 13:24) [7]
>а почему не TDateTimePicker?
А TDateTimePicker очень-очень-очень не удобно для ввода.
Mery (2007-09-27 14:46:00) [15]>Anatoly Podgoretsky © (27.09.07 14:37) [10]
Мне нужно создать удобство пользователю. Чтоб не вводил он точки, а только цифры при вводе даты. Ставил 2 цифры года, а после выхода из Edit видел отображение 4 цифр года, чтоб не вводить 11.01.2004, а только 110104, а выходя из Edit или DBEdit(если это поле таблицы), данные бы в нём видел в привычном формате даты.
Anatoly Podgoretsky (2007-09-27 14:37:00) [16]> Mery (27.09.2007 14:18:09) [9]
Зачем?
StrToDate
Mery (2007-09-27 14:18:00) [17]Но как в TEdit задать формат даты? И решить например мою проблему?
Anatoly Podgoretsky (2007-09-27 13:41:00) [18]> clickmaker (27.09.2007 13:24:07) [7]
Они могут сосуществовать.
А вот MaskEdit очень неухлюж. Например не выдерживает никакой конкуренции с ФоксПрошным по заботе о пользователе, тот удобен, а это измывательство надо пользователем. TEdit не совершает насилия над пользователем, позволяет ему делать любые извращения при вводе.
clickmaker (2007-09-27 13:24:00) [19]
> [6] Anatoly Podgoretsky © (27.09.07 13:07)
> TEdit
а почему не TDateTimePicker?
Anatoly Podgoretsky (2007-09-27 13:07:00) [20]TEdit