Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.02.28;
Скачать: [xml.tar.bz2];

Вниз

Вывести пустой TDateTimePicker   Найти похожие ветки 

 
С-К   (2014-08-08 17:44) [0]

То есть, чтобы DateTimePicker отображал пустые места, типа «  .  .  »

Можно, конечно, dtp.Format := """"""; - а потом при выборе значения из календарика подставлять dtp.Format := "";
но в таком случае в первоначально пустом виде нельзя сразу ручками вбить дату цифрами.

Если присвоить dtp.Date := 0, то, конечно, просто выставится 1899 год.

А нужно, чтобы DateTimePicker изначально был пустым и это можно было определить. Если так и не заполнили - то в БД писать nil.


 
А не проще ли ...   (2014-08-08 18:26) [1]

А не проще ли, если 1899 , то писать nil
чего тут городить ...


 
Rouse_ ©   (2014-08-08 21:32) [2]


> А нужно, чтобы DateTimePicker изначально был пустым и это
> можно было определить.

Возьми к примеру наручные часы - могут ли они отображать ноль?
Не могут, возьми настенный календарь - тоже не может.
Что ты хочешь от контрола, который изначально должен отображать не цифры, а время и дату?


 
Германн ©   (2014-08-09 02:45) [3]


> А нужно, чтобы DateTimePicker изначально был пустым и это
> можно было определить. Если так и не заполнили - то в БД
> писать nil.
>

TDateEdit от RxLib (JVCL) возможно позволяет определить введена ли какая-нибудь дата или нет. Это если не хочешь писать свой компонент.


 
ВладОшин ©   (2014-08-10 10:39) [4]

combobox на ондропдаун исчезает, показывается календарь


 
С-К   (2014-08-10 21:11) [5]


> А не проще ли, если 1899 , то писать nil

проще, только вопрос был не о том


> Что ты хочешь от контрола, который изначально должен отображать
> не цифры, а время и дату?

ты принципиально не прав. TDateTimePicker предназначен не для отображения даты, а для ВВОДА даты. И легко можно себе представить ситуацию, когда он должен быть изначально "пустой". То есть, даты просто нету. Пользователь может ввести дату, а может её принципиально не ввести.


 
Германн ©   (2014-08-11 01:58) [6]


> С-К   (10.08.14 21:11) [5]
> ты принципиально не прав.

Ты тоже. Причём гораздо более.
Пустыми могут быть строки или массивы. Переменные целого или вещественного типа пустыми быть не могут в принципе. (Практику использования NULL в БД не рассматриваю). Как должна программа реагировать на "пустое" поле ТDateTimePicker?


 
sniknik ©   (2014-08-11 08:23) [7]

> Пустыми могут быть строки или массивы.
это с точки зрения программирования, а по нуждам заказчиков (/пониманию пользователя) при начале ввода анкеты например в "год рождения" должно быть пусто... ведь он туда ничего еще не ввел.
ситуация часто встречающаяся (у меня точно).


 
С-К   (2014-08-11 09:25) [8]


> Переменные целого или вещественного типа пустыми быть не
> могут в принципе

переменные - да, но причем здесь это? Я говорю про интерфейс пользователя, когда контрол по умолчанию должен быть пустым, например.


>  Как должна программа реагировать на "пустое" поле ТDateTimePicker?

записать в соответствующее поле БД null


 
Rouse_ ©   (2014-08-11 10:23) [9]


> ты принципиально не прав

Ну что ж - каждому свое, однако я бы сделал это совершенно по другому.


 
Styx   (2014-08-11 10:36) [10]

А если заполнили, а потом передумали? Imho, лучше дополнительную галочку сделать.


 
С-К   (2014-08-11 10:43) [11]


> однако я бы сделал это совершенно по другому.

как?


> А если заполнили, а потом передумали?

вот именно. Для пользователя интуитивно  просто стереть дату, выделить её и нажать DEL. Но контрол стандартный это, судя по всему, не позволяет (


 
sniknik ©   (2014-08-11 10:43) [12]

> А если заполнили, а потом передумали?
в большинстве случаев это значит полный отказ от ввода всего (если продолжать пример анкеты).
но вообще если будет (/сделать) датапикер с дополнительным(/начальным) пустым значением, то разве проблема сделать в нем очистку ввода? ну например прямо в поле редактирования.


 
junglecat   (2014-08-11 11:11) [13]

А ShowCheckbox или что-то наподобие - не то ли часом?


 
Inovet ©   (2014-08-11 11:12) [14]

Наварример, надо ввести период, начальная дата известна, конечная пока открыта. Интуитивно её надо или не заполнять или стереь, если уже ввели что-то раньше. Галочки там и прочее дополнительная путаница


 
С-К   (2014-08-11 11:13) [15]


> А ShowCheckbox или что-то наподобие

в принципе да, но решение не такое интуитивное (
Мы раньше сами компонент писали, он все это позволял. А сейчас требование работать на стандартных компонентах и жалко, что даже в XE контрол этого не позволяет.

Или как-то можно?


 
С-К   (2014-08-11 11:15) [16]


> начальная дата известна, конечная пока открыта

верно, это еще один пример такого контрола


 
Rouse_ ©   (2014-08-11 11:25) [17]


> как?

Не использовал бы ТDateTimePicker, а по быстрому реализовал бы свой составной контрол (который будет отображать к примеру "дата не введена"), там делов-то на 15 минут.


 
junglecat   (2014-08-11 12:10) [18]

MaskEdit?


 
С-К   (2014-08-11 13:07) [19]


> там делов-то на 15 минут.

ну нет. Дело в том, что пользователи привыкли выбирать дату зачастую из календарика, который отображается по стрелочке вниз. Это же не чисто текстовый контрол.


 
junglecat   (2014-08-11 13:10) [20]

> [19] С-К   (11.08.14 13:07)

MaskEdit + MonthCalendar?
да можно и просто readonly Edit


 
С-К   (2014-08-11 13:13) [21]

>MonthCalendar

что это такое?


 
Rouse_ ©   (2014-08-11 13:17) [22]


> ну нет. Дело в том, что пользователи привыкли выбирать дату зачастую из календарика, который отображается по стрелочке вниз. Это же не чисто текстовый контрол.

Стандартный TDateTimePicker является составным контролом из Edit и MonthCalendar, тебе предлагают сделать то-же самое, только поведение эдита изменить на такое, как тебе нужно.


 
sniknik ©   (2014-08-11 13:34) [23]

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;


 
С-К   (2014-08-11 13:47) [24]

sniknik, как я понял поверх dtp ты фигачишь Edit... интересная идея, спасибо


 
sniknik ©   (2014-08-11 14:15) [25]

не поверх, внутрь.


 
Rouse_ ©   (2014-08-11 16:19) [26]


> С-К

Ну хорошо, давай попробуем без велосипедов.
Смотри, у TDateTimePicker есть стиль DTS_SHOWNONE: http://msdn.microsoft.com/en-us/library/windows/desktop/bb761728(v=vs.85).aspx
Который отвечает за отображение того что пикер не содержит валидной даты.

Управляется этот стиль при помощи свойства ShowCheckbox, при этом когда чекбокс выключен, дата задисейблена и сразу видно что дата не введена.


 
С-К   (2014-08-11 17:23) [27]


>  при этом когда чекбокс выключен, дата задисейблена и сразу
> видно что дата не введена.

ну я бы не сказал, что верно.

Вот: http://goo.gl/5JwKAi

Задисейблено - видно, но вот что дата не введена - не факт. Многие подумают, что дата введена (сегодняшнее число), но её изменить нельзя. Корректно было - если даты реально не было (пустое поле).


 
Rouse__   (2014-08-11 17:50) [28]

Что значит ты бы не сказал? Ты хочешь сказать что люди разрабатывающие юзабилити в MS делают все не верно? ;)


 
С-К   (2014-08-11 19:35) [29]


> Что значит ты бы не сказал?

что сразу видно, что дата не введена.


> Ты хочешь сказать что люди разрабатывающие юзабилити в MS
> делают все не верно?

я думаю нет смысла дискутировать на эту тему.

Я в целом обозначил задачу, она такая.


 
Rouse_ ©   (2014-08-11 19:55) [30]


> Я в целом обозначил задачу, она такая.

Ну раз так, то ответ был озвучен еще в [17]. Давно бы свой контрол склепал, чем время тратить на форуме.


 
С-К   (2014-08-11 19:58) [31]


> то ответ был озвучен еще в [17]

я писал ответ на этот пост.


 
Rouse_ ©   (2014-08-11 20:04) [32]


> С-К   (11.08.14 19:58) [31]
> я писал ответ на этот пост.

Ты написал неверный ответ. Составной контрол дружественный пользователю (с сохранением основных принципов ввода/вывода и листом выбора даты) пишется за 15 минут. Выглядит идентично DateTimePicker, но работает так как ты хочешь.


 
Rouse_ ©   (2014-08-11 20:05) [33]

Принцип реализации составных контролов можешь посмотреть вот тут: http://rouse.drkb.ru/components.php#fwvistapathedit


 
имя   (2014-08-11 20:37) [34]

Удалено модератором


 
Rouse_ ©   (2014-08-11 20:39) [35]


> С-К   (11.08.14 19:35) [29]
> что сразу видно, что дата не введена.

Кажется именно такая и была изначальная задача в самом первом посте:


> С-К   (08.08.14 17:44) [0]
>  и это можно было определить


 
Германн ©   (2014-08-12 01:25) [36]


>  С-К   (11.08.14 13:07) [19]
>
>
> > там делов-то на 15 минут.
>
> ну нет. Дело в том, что пользователи привыкли выбирать дату
> зачастую из календарика, который отображается по стрелочке
> вниз.

Ещё раз повторю TDateEdit от RxLib.
Ставить библиотеку не надо как и не обязательно использовать этот компонент. Но его исходный код был бесплатно отдан всем желающим. И работает он именно так как тебе хочется.


 
Германн ©   (2014-08-12 01:27) [37]


> sniknik ©   (11.08.14 08:23) [7]
>
> > Пустыми могут быть строки или массивы.
> это с точки зрения программирования, а по нуждам заказчиков
> (/пониманию пользователя) при начале ввода анкеты например
> в "год рождения" должно быть пусто... ведь он туда ничего
> еще не ввел.
> ситуация часто встречающаяся (у меня точно).
>

Я же специально сказал
>  (Практику использования NULL в БД не рассматриваю)

:)


 
С-К   (2014-08-12 09:08) [38]


> пишется за 15 минут

как реализовать выпадающий календарик?


> Ещё раз повторю TDateEdit от RxLib.

еще раз повторю:


> А сейчас требование работать на стандартных компонентах



> Я же специально сказал
> >  (Практику использования NULL в БД не рассматриваю)

ну а мне от этого не легче, потому что если пользователь не ввел дату - то в БД надо писать null, и это логично.


 
junglecat   (2014-08-12 09:38) [39]

> сейчас требование работать на стандартных компонентах

обычно под этим понимается "не юзать платные компоненты, потому что бабланетнах". А rxlib - бесплатна


 
Rouse_ ©   (2014-08-12 10:24) [40]


> С-К   (12.08.14 09:08) [38]
> как реализовать выпадающий календарик?

Ну я ж тебе даже ссылку на пример дал :)
Ладно, пойдем более простым путем, на форму кидай кнопку и календарь, у календаря свойство Visible ставь в False, потом в обработчике кнопки пиши следующий код:

procedure TForm1.Button1Click(Sender: TObject);
begin
 MonthCalendar1.Left := Button1.Left;
 MonthCalendar1.Top := Button1.Top + Button1.Height;
 AnimateWindow(MonthCalendar1.Handle, 200, AW_SLIDE or AW_VER_POSITIVE);
 MonthCalendar1.Visible := True;
end;



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2016.02.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.003 c
15-1433936637
brother
2015-06-10 14:43
2016.02.28
Помогите просчитать значение формулы


15-1434490201
Юрий
2015-06-17 00:30
2016.02.28
С днем рождения ! 17 июня 2015 среда


15-1433021404
Юрий
2015-05-31 00:30
2016.02.28
С днем рождения ! 31 мая 2015 воскресенье


15-1433224643
Pavelnk
2015-06-02 08:57
2016.02.28
Нарисовать трапецию


11-1263286942
magi6162
2010-01-12 12:02
2016.02.28
KOL-CE and DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский