Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Работа с системным временем и календарём


Автор: Hellen 24.1.2009, 21:49
Пользователь выбирает из выпадающего списка день и месяц начало работ
и аналогично завершение работы.
После этого появляется календарь,  на календаре отображается диапазон выбранного участка времени.
Первый вопрос:-Как реализовать календарь?
Второй вопрос:-Как посчитать кол-во часов в этом диапазоне?
Спасибо!

Если можно по календарю: smile 

Автор: SkyAngel 25.1.2009, 00:16
Собственно в группе Samples есть компонент - TCalendar. Если не нравиться этот - в группе Win32 есть 2 компонента - TmonthCalendar. Ещё может помочь TDateTimePicker. В общем используй эти компоненты. Свяжи одного с другим. Я думаю - разберёшься. Для подсчёта часов - просто посчитай количество дней между датой и теперешним днём.
Для получения системной даты в виде строки - используй DateToStr(Date). А там можешь вырезать нужные символы.
Для получения выбранной даты - используй ИмяКалендаря.Date; Там сново достанешь необходимые символы. Но если я не ошибаюсь - то можно даже вычитать даты одну из другой. Но это по желанию, как делать ;).

Автор: Данкинг 25.1.2009, 00:43
Цитата(Hellen @  24.1.2009,  21:49 Найти цитируемый пост)
Как реализовать календарь?

Для начала прочитать хотя бы одну книгу по Дельфи. smile 

Цитата(Hellen @  24.1.2009,  21:49 Найти цитируемый пост)
Как посчитать кол-во часов в этом диапазоне?

А каждый день количество часов одинаковое? Т.е. работник не может ни переработать, ни уйти пораньше? Тогда посчитать число дней между датами - функция DaysBetween из dateutils - и, соответственно, умножить часы.

Цитата(SkyAngel @  25.1.2009,  00:16 Найти цитируемый пост)
Для получения системной даты в виде строки - используй DateToStr(Date). А там можешь вырезать нужные символы.

Вырезать? А на формат даты в "региональных настройках" можно типа забить? smile 

Автор: Bose 25.1.2009, 01:53
Hellen, смотри справку по ключевому слову dateutils

Автор: Hellen 25.1.2009, 17:12
Цитата

Для начала прочитать хотя бы одну книгу по Дельфи.

Прочла и не одну,  системное время и календари откровенно забивала, типа эта чушь мне не нужна будет, а сейчас столкнулась.

Цитата

А каждый день количество часов одинаковое?
 Одинаковое.
Цитата

по ключевому слову dateutils

Посмотрим

Цитата

Собственно в группе Samples есть компонент

Спасибо я поюзаю и вернусь, тоесть я не прощаюсь.

 smile 

Автор: Данкинг 25.1.2009, 17:53
Цитата(Hellen @  25.1.2009,  17:12 Найти цитируемый пост)
Прочла и не одну,  системное время и календари откровенно забивала, типа эта чушь мне не нужна будет, а сейчас столкнулась.

"Delphi в подлиннике" Фаронова - там про все основные компоненты сказано. Если всю эту книгу прочесть, то будешь иметь представление о том, какие компоненты существуют в принципе.

Автор: Dobermann 25.1.2009, 17:58
Цитата(Данкинг @  25.1.2009,  17:53 Найти цитируемый пост)
"Delphi в подлиннике" Фаронова - там про все основные компоненты сказано. Если всю эту книгу прочесть, то будешь иметь представление о том, какие компоненты существуют в принципе.

 smile 

Автор: Данкинг 25.1.2009, 19:07
Цитата(Dobermann @ 25.1.2009,  17:58)
Цитата(Данкинг @  25.1.2009,  17:53 Найти цитируемый пост)
"Delphi в подлиннике" Фаронова - там про все основные компоненты сказано. Если всю эту книгу прочесть, то будешь иметь представление о том, какие компоненты существуют в принципе.

 smile

В смысле? smile 

Автор: Hellen 26.1.2009, 22:45
Я поюзала и вернулась.
Мне необходимо что бы пользователь на открывшемся календарике отметил не рабочие субботы и воскресения.
Сначала при помощи DateTimePicker1  и  DateTimePicker2 выбирает числа-
Далее появляется календарь,  в этом календаре он ручками отмечает не рабочие дни и далее программа считает кол-во дней.
Возможно это?
Подскажите пжлста.

В свойствах объекта (календарей)  я диапазона не нашла.
И возможность выделения дней тоже.

Что за свойство  DoubleBuffered ?? что за двойной буфер? 

Автор: Hellen 26.1.2009, 23:05
http://forum.vingrad.ru/forum/topic-153495/unread-1.html
нашла в поиске вот чего, но там как то скучно.......

Автор: Данкинг 26.1.2009, 23:05
Hellen, без БД не обойтись. У нас на работе я сделал так, что юзер каждый день отмечается, т.е. ставит себе, сколько часов он отработал, данные эти хранятся в MDB. На форме лежит календарь, по умолчанию при запуске ставится сегодняшняя дата. В конце месяца делается отчёт по всем датам заданного диапазона с подсчётом и суммарного времени для каждого работника, который затем выводится в Excel.

Цитата(Hellen @  26.1.2009,  22:45 Найти цитируемый пост)
Что за свойство  DoubleBuffered ?? что за двойной буфер?  

Не знаю, это откуда вообще?

Добавлено через 45 секунд
Цитата(Hellen @  26.1.2009,  23:05 Найти цитируемый пост)
нашла в поиске вот чего, но там как то скучно....... 

Угу, цветных картинок нет. smile  smile 

Автор: Hellen 26.1.2009, 23:58
Цитата

Не знаю, это откуда вообще?
 Это свойство объектов (в инспекторе объектов) DateTimePicker  и  DateTimePicker  в  codegear-2009.

Цитата

без БД не обойтись
 База Acces и ADOшки мне ближе,  я могу реализовать это при помощи аксес?
А что будет храниться в таблице.
Можно чуть поподробней схему действия развернуть???



Цитата

Угу, цветных картинок нет
 Хватит издеваться над бедными чайниками

"Я знаю что я ни чего не знаю, но многие не знают и этого"  - Это дядька Сократ сказал.

Добавлено через 2 минуты и 26 секунд
Это свойство объектов  DateTimePicker  и  MonthCalendar

Автор: Данкинг 27.1.2009, 00:17
Цитата(Hellen @  26.1.2009,  23:58 Найти цитируемый пост)
Это свойство объектов (в инспекторе объектов) DateTimePicker  и  DateTimePicker  в  codegear-2009.

Не знаю, в общем, я и codegear-то не видел ни разу.  Но думаю, что это нечто такое, без чего можно обойтись, при этом спокойно живя и размножаясь. smile 

Цитата(Hellen @  26.1.2009,  23:58 Найти цитируемый пост)
 База Acces и ADOшки мне ближе,  я могу реализовать это при помощи аксес?

Я же говорю, у меня в MDB.

Цитата(Hellen @  26.1.2009,  23:58 Найти цитируемый пост)
Можно чуть поподробней схему действия развернуть???

У меня две таблицы: одна с юзерами, где хранится ник, под которым они заходят, и полное имя, которое отображается в распечатке часов, т.е. ник M@SHUTKA_LUCHCHE_VSEH!!!)))))), имя - Подъяблонская Мария. smile Пароля нет, но если он тебе нужен, то, соответственно, как-то думаешь над шифровкой паролей и авторизацией. Вторая таблица - для хранения часов. Далее на календаре выбирается нужная дата, а в Edit пишется число - количество отработанных часов за эту дату. В другую таблицу вносится ник, дата и часы (+ещё имя компьютера, откуда вносили и время внесения).

Добавлено @ 00:18
Цитата(Hellen @  26.1.2009,  23:58 Найти цитируемый пост)
Хватит издеваться над бедными чайниками

Кто издевается - я? smile Да как можно! smile  smile  smile 

Автор: Hellen 27.1.2009, 00:41
Ну мне такая крутизна не нужна, с паролями и никами. у меня задачка то копеечная.
Две даты и подсчитать кол-во дней  между ними.
Но приэтом не считать те дни, которые пользователь вычеркнул из календаря.
Не знаю в какую сторону двигаться, если сразу знать что обычными компонентами не получится, я бы двигалась в другом направлении.

Автор: Данкинг 27.1.2009, 00:48
Цитата(Hellen @  27.1.2009,  00:41 Найти цитируемый пост)
Не знаю в какую сторону двигаться,

Вероятно, в ту же, что и я, только задача обратная: внести в базу те дни, в которые работник отсутствовал.

Автор: Hellen 27.1.2009, 00:53
внести в базу те дни  в которые работник присутствовал на работе.
Меня больше пугает процесс как юзер будет вычеркивать дни, самое простое для него выделить дни на каледаре.
А как ещё можно сделать?

Автор: Данкинг 27.1.2009, 01:10
Кнопку кинуть. Отметил дату на календаре - кликнул кнопку - дата внеслась.

Автор: Hellen 27.1.2009, 21:27
Отметил вторую дату на календаре - кликнул кнопку - и опять дата внеслась.
Ну что ж мне с тобой делать???
буду пробовать......

Добавлено через 2 минуты и 22 секунды
А что бы диапазон времени показывала например с 27го января по 8 марта, этого можно добится используя выше указаные компоненты?

Автор: Данкинг 27.1.2009, 21:34
Цитата(Hellen @  27.1.2009,  21:27 Найти цитируемый пост)
Ну что ж мне с тобой делать???

А что надо со мной делать?! smile  smile 

Цитата(Hellen @  27.1.2009,  21:27 Найти цитируемый пост)
А что бы диапазон времени показывала например с 27го января по 8 марта, этого можно добится используя выше указаные компоненты? 

Кто показывала? Объект "календарь" представляешь? smile 

Автор: Hellen 27.1.2009, 21:43
Объект  календарь отображает один месяц, надо его заставить отображать полтора месяца.
Вот что я спрашивала.
 можно так?

Автор: Данкинг 27.1.2009, 23:27
Цитата(Hellen @  27.1.2009,  21:43 Найти цитируемый пост)
можно так? 

Низя. smile 

Автор: Hellen 28.1.2009, 00:27
Можно, уже сделала.
мин дат  - макс дат

Мне надо отобразить этот диапазон делаю вот так:
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
MonthCalendar1.MinDate:=DateTimePicker1.Date;
MonthCalendar1.MaxDate:=DateTimePicker2.Date;
end;

теперь узнать сколько дней:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=Floattostr(MonthCalendar1.Date);
end;

он отображает  39840 дней как мне посчитать сколько в этом промежутке  дней?

Добавлено через 1 минуту и 9 секунд
Он выводит  число 39840 не зависимо какой у календаря промежуток  времени текущий

Автор: Данкинг 28.1.2009, 00:53
Цитата(Hellen @  28.1.2009,  00:27 Найти цитируемый пост)
мин дат  - макс дат

Попробовал, поставил минимальную дату на календаре 21.01.2009, так он как кликался назад за эту дату, так и кликается; в общем, не знаю, что это за свойства такие и как они работают.

Цитата(Hellen @  28.1.2009,  00:27 Найти цитируемый пост)
он отображает  39840 дней как мне посчитать сколько в этом промежутке  дней?

Странно, что он вообще что-либо отображает, поскольку ты тип "дата" переводишь из числа с плавающей точкой в текст. smile  smile При этом никаких выбранных диапазонов, разумеется, не учитывается: берётся дата, которая отмечена на календаре. А число дней между датами вычисляется функцией "DaysBetween", я где-то уже писал.



 


Автор: Hellen 28.1.2009, 20:49
Цитата

"DaysBetween"
 ОК Нашла! и спасибо,  тему закрываю,  но советую не раслабляться))

Автор: Данкинг 28.1.2009, 22:04
Цитата(Hellen @  28.1.2009,  20:49 Найти цитируемый пост)
но советую не раслабляться)) 

Да я и не думал... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)