Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
ВнизФормат даты Найти похожие ветки
← →
Mery (2007-09-27 09:38) [0]Как добиться того, чтобы после ввода в поле с EditMask:=!99/99/00;1;_ нужных данных автоматически подставлялись две первые цифры года? Это возможно, если задана маска ввода?
← →
Сергей М. © (2007-09-27 09:51) [1]
> автоматически подставлялись две первые цифры года
Куда подставлялись-то ?
← →
Вася Правильный (2007-09-27 10:56) [2]настройки подстановки первых цифр года определяются в региональных настройках винды
← →
Mery (2007-09-27 11:11) [3]>Вася Правильный (27.09.07 10:56) [2]
Это понятно.
Вопрос в другом.
Пользователю удобно занося дату не ставить точки и год прописывать 2 последними цифрами. Т.Е. 210907-это то, что занёс пользователь.
Для этого используется EditMask:=!99/99/00;1;_ например для компонента Mask Edit.
А можно ли, чтобы на OnExit Этого компонента всё-таки отображение года было 4 цифрами, хотя пользователь ввёл две цифры года?
← →
Anatoly Podgoretsky © (2007-09-27 11:52) [4]> Mery (27.09.2007 11:11:03) [3]
Противоречишь себе.
Но совет выкинь maskedit
← →
Mery (2007-09-27 12:18) [5]>Anatoly Podgoretsky © (27.09.07 11:52) [4]
>Но совет выкинь maskedit
Почему? Чем заменить?
← →
Anatoly Podgoretsky © (2007-09-27 13:07) [6]TEdit
← →
clickmaker © (2007-09-27 13:24) [7]
> [6] Anatoly Podgoretsky © (27.09.07 13:07)
> TEdit
а почему не TDateTimePicker?
← →
Anatoly Podgoretsky © (2007-09-27 13:41) [8]> clickmaker (27.09.2007 13:24:07) [7]
Они могут сосуществовать.
А вот MaskEdit очень неухлюж. Например не выдерживает никакой конкуренции с ФоксПрошным по заботе о пользователе, тот удобен, а это измывательство надо пользователем. TEdit не совершает насилия над пользователем, позволяет ему делать любые извращения при вводе.
← →
Mery (2007-09-27 14:18) [9]Но как в TEdit задать формат даты? И решить например мою проблему?
← →
Anatoly Podgoretsky © (2007-09-27 14:37) [10]> Mery (27.09.2007 14:18:09) [9]
Зачем?
StrToDate
← →
Mery (2007-09-27 14:46) [11]>Anatoly Podgoretsky © (27.09.07 14:37) [10]
Мне нужно создать удобство пользователю. Чтоб не вводил он точки, а только цифры при вводе даты. Ставил 2 цифры года, а после выхода из Edit видел отображение 4 цифр года, чтоб не вводить 11.01.2004, а только 110104, а выходя из Edit или DBEdit(если это поле таблицы), данные бы в нём видел в привычном формате даты.
← →
Mery (2007-09-27 14:48) [12]clickmaker © (27.09.07 13:24) [7]
>а почему не TDateTimePicker?
А TDateTimePicker очень-очень-очень не удобно для ввода.
← →
Anatoly Podgoretsky © (2007-09-27 14:58) [13]> Mery (27.09.2007 14:46:11) [11]
Ну так и форматируй при выходе, а насчет удобства тут надо психологию менять, реализация MaskEdit в Дельфи отвратительная, неудобная для пользователя.
← →
Anatoly Podgoretsky © (2007-09-27 15:00) [14]
> А TDateTimePicker очень-очень-очень не удобно для ввода.
Тоже так считаю, еще куда не шло в пределах текущего метода, а чуть дальше и пользователь уже теряется или производит много лишних действий.
← →
Washington © (2007-09-27 15:02) [15]
> Mery (27.09.07 14:18) [9]
Обычная работа со строкой ИМХО
← →
{RASkov} © (2007-09-27 15:21) [16]Все не так сложно, если не один момент
При вводе пользователем вот такой строки
121176
Как ее рассматривать
1/2/1176
или
12/11/76
и еще есть "моменты" наподобие этого... А кроме этого ничего сложного нет :)
А вот так - 1276 - что думать? Пользователь ошибся или ввел верно?
← →
Anatoly Podgoretsky © (2007-09-27 15:35) [17]> {RASkov} (27.09.2007 15:21:16) [16]
Определяется инструкцией, все отклонения считаются ошибкой
← →
{RASkov} © (2007-09-27 16:17) [18]> Определяется инструкцией, все отклонения считаются ошибкой
Тогда вообще никаких проблем :) Все просто....
Например: Строка после ввода пользователем должна иметь длину 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 16:35) [19]> {RASkov} (27.09.2007 16:17:18) [18]
Проверки нужны на допустимость, например TryStrToDate
← →
{RASkov} © (2007-09-27 16:50) [20]> [19] Anatoly Podgoretsky © (27.09.07 16:35)
> Проверки нужны на допустимость
Ну дык и у меня, в примере выше, об этом не забыто :)
Или прямо-таки обязательно нужно TryStrToDate?
← →
{RASkov} © (2007-09-27 16:52) [21]> TryStrToDate?
Тьфу... блин прочитал как TryStrToInt....)
← →
Anatoly Podgoretsky © (2007-09-27 16:53) [22]> {RASkov} (27.09.2007 16:50:20) [20]
Желательно, поскольку потом надо обратно преобразовать в строку или выдать сообщение пользователю.
А у тебя ничего не вижу, кроме ошибок.
← →
{RASkov} © (2007-09-27 16:56) [23]> [22] Anatoly Podgoretsky © (27.09.07 16:53)
Я понял уже.... спасибо.
← →
Leonid Troyanovsky © (2007-09-28 12:48) [24]
> Mery (27.09.07 14:48) [12]
> А TDateTimePicker очень-очень-очень не удобно для ввода.
Это заблуждение.
Прикинем объем клав. ввода:
В 22% случаев количество нажатий совпадает с вводом
по формату ddmmyy (до 2009 года кол-во даже меньше).
Кроме того, нажатия отличаются по смыслу: числовые клавиши -
формирование данных, а стрелка - подтверждение ввода.
Оставшиеся 78% - это одно доп. нажатие, но
много доп. возможностей: например, 13 месяц не
получится никогда, как и 32 день, как и 29.02 в не високосный год.
Самое приятное, что для этого не нужно ни строки кода.
Ну, и дополнительный бонус: сам выпадающий календарь.
А если проявлять сверзаботу о юзере, то надо смотреть,
что за даты вводятся. Если, например, из одного года,
то стоит выделить год в отдельное поле и, возможно,
задизайблить его (оставив горячую клавишу для enable).
Аналогично месяц, на этот раз - combobox, и т.д.
--
Regards, LVT.
← →
Malik © (2007-09-28 14:04) [25]Я не читал, может уже кто-то сказал... Брось это.... А тебе чем не угодил компонент типа TDateTimePicker
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c