![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывести пустой TDateTimePicker
С-К © (2014-08-08 17:44:00)То есть, чтобы DateTimePicker отображал пустые места, типа « . . »
Можно, конечно, dtp.Format := ''''''; - а потом при выборе значения из календарика подставлять dtp.Format := '';
но в таком случае в первоначально пустом виде нельзя сразу ручками вбить дату цифрами.
Если присвоить dtp.Date := 0, то, конечно, просто выставится 1899 год.
А нужно, чтобы DateTimePicker изначально был пустым и это можно было определить. Если так и не заполнили - то в БД писать nil.
С-К (2014-08-11 19:35:00) [41]
> Что значит ты бы не сказал?
что сразу видно, что дата не введена.
> Ты хочешь сказать что люди разрабатывающие юзабилити в MS
> делают все не верно?
я думаю нет смысла дискутировать на эту тему.
Я в целом обозначил задачу, она такая.
Rouse__ (2014-08-11 17:50:00) [42]Что значит ты бы не сказал? Ты хочешь сказать что люди разрабатывающие юзабилити в MS делают все не верно? ;)
С-К (2014-08-11 17:23:00) [43]
> при этом когда чекбокс выключен, дата задисейблена и сразу
> видно что дата не введена.
ну я бы не сказал, что верно.
Вот: http://goo.gl/5JwKAi
Задисейблено - видно, но вот что дата не введена - не факт. Многие подумают, что дата введена (сегодняшнее число), но её изменить нельзя. Корректно было - если даты реально не было (пустое поле).
Rouse_ (2014-08-11 16:19:00) [44]
> С-К
Ну хорошо, давай попробуем без велосипедов.
Смотри, у TDateTimePicker есть стиль DTS_SHOWNONE: http://msdn.microsoft.com/en-us/library/windows/desktop/bb761728(v=vs.85).aspx
Который отвечает за отображение того что пикер не содержит валидной даты.
Управляется этот стиль при помощи свойства ShowCheckbox, при этом когда чекбокс выключен, дата задисейблена и сразу видно что дата не введена.
sniknik (2014-08-11 14:15:00) [45]не поверх, внутрь.
С-К (2014-08-11 13:47:00) [46]sniknik, как я понял поверх dtp ты фигачишь Edit... интересная идея, спасибо
sniknik (2014-08-11 13:34:00) [47]
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Parent:= DateTimePicker1;
Edit1.Align := alLeft;
Edit1.BorderStyle:= bsNone;
Edit1.Width:= DateTimePicker1.ClientWidth - GetSystemMetrics(SM_CXVSCROLL);
//Edit1.ReadOnly:= true;
end;
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
Edit1.Text:= DateToStr(DateTimePicker1.Date);
end;
procedure TForm1.DateTimePicker1Enter(Sender: TObject);
begin
DateTimePicker1.DateTime:= StrToDateDef(Form1.Edit1.Text, Now());
end;
Rouse_ (2014-08-11 13:17:00) [48]
> ну нет. Дело в том, что пользователи привыкли выбирать дату зачастую из календарика, который отображается по стрелочке вниз. Это же не чисто текстовый контрол.
Стандартный TDateTimePicker является составным контролом из Edit и MonthCalendar, тебе предлагают сделать то-же самое, только поведение эдита изменить на такое, как тебе нужно.
С-К (2014-08-11 13:13:00) [49]>MonthCalendar
что это такое?
junglecat (2014-08-11 13:10:00) [50]> [19] С-К (11.08.14 13:07)
MaskEdit + MonthCalendar?
да можно и просто readonly Edit
С-К (2014-08-11 13:07:00) [51]
> там делов-то на 15 минут.
ну нет. Дело в том, что пользователи привыкли выбирать дату зачастую из календарика, который отображается по стрелочке вниз. Это же не чисто текстовый контрол.
junglecat (2014-08-11 12:10:00) [52]MaskEdit?
Rouse_ (2014-08-11 11:25:00) [53]
> как?
Не использовал бы ТDateTimePicker, а по быстрому реализовал бы свой составной контрол (который будет отображать к примеру "дата не введена"), там делов-то на 15 минут.
С-К (2014-08-11 11:15:00) [54]
> начальная дата известна, конечная пока открыта
верно, это еще один пример такого контрола
С-К (2014-08-11 11:13:00) [55]
> А ShowCheckbox или что-то наподобие
в принципе да, но решение не такое интуитивное (
Мы раньше сами компонент писали, он все это позволял. А сейчас требование работать на стандартных компонентах и жалко, что даже в XE контрол этого не позволяет.
Или как-то можно?
Inovet (2014-08-11 11:12:00) [56]Наварример, надо ввести период, начальная дата известна, конечная пока открыта. Интуитивно её надо или не заполнять или стереь, если уже ввели что-то раньше. Галочки там и прочее дополнительная путаница
junglecat (2014-08-11 11:11:00) [57]А ShowCheckbox или что-то наподобие - не то ли часом?
sniknik (2014-08-11 10:43:00) [58]> А если заполнили, а потом передумали?
в большинстве случаев это значит полный отказ от ввода всего (если продолжать пример анкеты).
но вообще если будет (/сделать) датапикер с дополнительным(/начальным) пустым значением, то разве проблема сделать в нем очистку ввода? ну например прямо в поле редактирования.
С-К (2014-08-11 10:43:00) [59]
> однако я бы сделал это совершенно по другому.
как?
> А если заполнили, а потом передумали?
вот именно. Для пользователя интуитивно просто стереть дату, выделить её и нажать DEL. Но контрол стандартный это, судя по всему, не позволяет (
Styx (2014-08-11 10:36:00) [60]А если заполнили, а потом передумали? Imho, лучше дополнительную галочку сделать.