Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.02.2011, 23:14
BROWAX BROWAX вне форума
Прохожий
 
Регистрация: 10.02.2011
Сообщения: 4
Репутация: 10
По умолчанию Календарь

Всем привет. Первый раз сталкиваюсь с написанием компонентов, поэтому пришел сюда.
Хочу написать компонент Календарь. Все которые есть не устраивают или по внешнему виду или по функционалу. Да и в общем хочется свой сделать.
О самом компоненте только сейчас задумался. Пока календарь делаю на самой форме из VCL компонентов.

Я использую одни Label, планирую добавить пару имажев и панелей для красоты, но это потом.
Сейчас стал вопрос очень жестко, как все отсортировать, т.е. дни недели месяца и все тому подобные данные я могу получить, вот что бы составить по порядку дни и в виде стандартного календаря ума не приложу как и что написать.
Подскажите как лучше отсортировать дни и выставить их правильном порядке и что бы совпадали дни недели?

Буду рад любым высказываниям.
Ответить с цитированием
  #2  
Старый 10.02.2011, 23:49
BROWAX BROWAX вне форума
Прохожий
 
Регистрация: 10.02.2011
Сообщения: 4
Репутация: 10
По умолчанию

Только что додумался как организовать эту так называемую сортировку.
Каждый Label нумеруем по порядку от labday1 до labday42, первый labday всегда будет понедельник и пошло по порядку.
Теперь вопрос ко всем Вам. Подскажите кодик какой нибудь заполняющий это чудо, а то что то у меня не получается.

И собственно по теме раздела. Как это чудо переделать в компонент?
Какого потомка использовать? Жду Ваших ответов.
Ответить с цитированием
  #3  
Старый 11.02.2011, 06:12
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

К сожалению на работе перешли на лиц. софт. А Delphi не есть необходимое ПО в сфере работы. Поэтому сижу тут на Лазарусе. Поэтому функции и модули в Делфи поищешь сам.

А Общая идея такая:
1. Заводим переменные dYear, dMonth, dDay: Word; (Хотя для дня и месяца было бы достаточно Byte)

2. Для указанного года и месяца (в переменных dYear, dMonth - см. п.1) вычисляем количество дней в месяце:
2.1 Можно составить табличку. В лазарусе она выглядит так:
Код:
type
  TDayTable = array[1..12] of Word;
const
  MonthDays: array [Boolean] of TDayTable =
     ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
      (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));
2.2 Почему Таблицы 2? Да потому, что год может быть високосный. А определить это можно функцией IsLeapYear, которая по указанному году вернет True/False взависимости от високосности.
2.3 По результату этой функции выбираешь, по какой табличке тебе смотреть количество дней в месяце.

3. Теперь необходимо узнать, с какого дня недели начинается месяц. В этом поможет функция DayOfWeek. Если не ошибаюсь, то она вернет результат от 0..6, где 0 - Воскресенье. (Проверь!)

4. Ну а дальше отрисовываешь свой компонент как тебе нравится. Ты знаешь сколько дней в месяце, знаешь с какого дня начинать. Заводишь табличку в 7 столбцов. первую строку подписываешь пн...вс. А со следующей строки, с определенного столбца (см. п.3) заполняешь построчно от 1 до количество дней в месяце (см. п.2). А если указанный день совпадает с номером отрисовываемого дня, можншь его пометить как-нибудь.

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

Можешь создавать массив TRect, в котором запоминать "расположение" дней в месяце. И по клике по компоненту проверять, в какой день кликнули, и выполнить соответствующее действие. Можешь усложнить структуру и хранить информацию, например, о цвете отрисовки (например для пометки важного дня). Можешь добавить хинты для каждого дня и т.п. Вобщем, тут полет фантазии.


Почему я это расписал? Да потому, что меня спугнула твоя идея создания календаря из контролов в ДизайнТайм. Расставление лейблов и прочего. Нафига? Посмотри тут на формуме, полно тем про динамическое создание компонент. Очень удобно
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 11.02.2011 в 06:18.
Ответить с цитированием
  #4  
Старый 11.02.2011, 09:18
BROWAX BROWAX вне форума
Прохожий
 
Регистрация: 10.02.2011
Сообщения: 4
Репутация: 10
По умолчанию

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

Визуальную красоту потихоньку продумываю как что и как отмечать.
Сегодня закончу с самой программой надеюсь и буду потихоньку переходить на создание компонента.
Хотя вопрос стоит или не стоит его создавать? Будет ли на него спрос? Я не думаю о материальной выгоде. Просто хочется создать и что бы кому то пригодился. Ладно пока начнем а там видно будет.

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

Буду очень рад примерчику.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025