Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 645

/ вопрос решён /

Здравствуйте, уважаемые эксперты! В каком стандартном компоненте легче сделать не активность определённых дней в календаре? Возможно ли это сделать в datetimepicker или monthcalendar? Если конкретно, то необходимо в календаре сделать так, что бы активные днями был четверг, а остальные дни были не активны, т.е нужен календарь где можно выбрать только четверг. Спасибо.

enable23 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: enable23 (статус: Посетитель)
Вопрос отправлен: 16 декабря 2016, 11:55
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: dmistand

Здравствуйте, enable23!
Качай проект, играйся. Делал в Embarcadero Delphi 2010.
ЛКМ - выделяет день в календаре, повтор - снимает выделение.

https://yadi.sk/d/-EaZFIkO33hM7F

Ответ отправил: dmistand (статус: 1-ый класс)
Время отправки: 16 декабря 2016, 12:41

Ответ #2. Отвечает эксперт: min@y™

Да йопть!

uses
DateUtils;

type
{ дни недели
DayMonday = 1;
DayTuesday = 2;
DayWednesday = 3;
DayThursday = 4;
DayFriday = 5;
DaySaturday = 6;
DaySunday = 7; }
TDows = set of Byte;

function IsHoliday(const dt: TDateTime): Boolean;
begin
// функция возвращает true, если дата dt - гос. праздник/выходной
// сам напишешь.
end;

function FillComboDates(cb: TComboBox; const Mask: TDows; const Interval: int32): Boolean;
var
dt, edt: TDateTime;
dow: int32;
begin
dt:= Date();
edt:= IncDay(dt, Interval);
cb.Items.Clear();
cb.Text= ''; // не обязательно

repeat
if not IsHoliday(dt) and (Byte(DayOfTheWeek(dt)) in Mask)
then cb.Items.Add(FormatDateTime('dddd, d mmm yyyy', dt);
IncDay(dt);
until dt > edt;

Result:= cb.Items.Count <> 0;
cb.Style:= csDropDownList;

if Result
then cb.ItemIndex:= 0;
end;

Ахтунг! Не отлаживал!
Писал на заборе.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 16 декабря 2016, 14:10
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 16 декабря 2016, 13:43; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 16 декабря 2016, 12:05 [#1]:

А для чего это нужно на практике?
Не проще положить на форму 3 комбобокса: год, месяц и день, а при выборе в первых двух заполнять 3-й только днями, которые выпадают на четверг.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
enable23

enable23 (статус: Посетитель), 16 декабря 2016, 13:16 [#2]:

min@y™, данная идея возникла для написания программы приёма граждан, к примеру, записаться к человеку можно только по четвергам и что бы исключить выбор другого дня, хочется сделать в календаре активные для выбора дни только четверги.
min@y™

min@y™ (статус: Доктор наук), 16 декабря 2016, 13:24 [#3]:

Ага. А максимальный временной интервал задан? Ну там, как в РЖД - 45 суток (или 60 там сделали щас). Ну т.е. записаться можно максимум на Х дней вперёд.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
enable23

enable23 (статус: Посетитель), 16 декабря 2016, 13:30 [#4]:

Скорее всего на 60 суток
min@y™

min@y™ (статус: Доктор наук), 16 декабря 2016, 13:39 [#5]:

Цитата (enable23):

Скорее всего на 60 суток

Интересовало просто наличие этого лимита. Значение-то можно переменным сделать.
Ещё один плюс к моему простейшему варианту.
Если дата отсчёта - сегодня, то достаточно 1 комбобокса, который заполнять с учётом интервала и приёмных дней недели.
И всего делов.

Написать функцию на коленке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
enable23

enable23 (статус: Посетитель), 16 декабря 2016, 13:43 [#6]:

Да можно, если не затруднит Вас.

16 декабря 2016, 14:12: Статус вопроса изменён на решённый (изменил автор вопроса — enable23)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 20 ноября 2018, 08:18
Выполнено за 0.04 сек.
Рейтинг@Mail.ru