|
Вопрос # 6 645/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты! В каком стандартном компоненте легче сделать не активность определённых дней в календаре? Возможно ли это сделать в datetimepicker или monthcalendar? Если конкретно, то необходимо в календаре сделать так, что бы активные днями был четверг, а остальные дни были не активны, т.е нужен календарь где можно выбрать только четверг. Спасибо.
|
Вопрос задал: 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™ (статус: Доктор наук), 16 декабря 2016, 12:05 [#1]:
А для чего это нужно на практике?
Не проще положить на форму 3 комбобокса: год, месяц и день, а при выборе в первых двух заполнять 3-й только днями, которые выпадают на четверг.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
enable23 (статус: Посетитель), 16 декабря 2016, 13:16 [#2]:
min@y™, данная идея возникла для написания программы приёма граждан, к примеру, записаться к человеку можно только по четвергам и что бы исключить выбор другого дня, хочется сделать в календаре активные для выбора дни только четверги.
|
|
min@y™ (статус: Доктор наук), 16 декабря 2016, 13:24 [#3]:
Ага. А максимальный временной интервал задан? Ну там, как в РЖД - 45 суток (или 60 там сделали щас). Ну т.е. записаться можно максимум на Х дней вперёд.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
enable23 (статус: Посетитель), 16 декабря 2016, 13:30 [#4]:
Скорее всего на 60 суток
|
|
min@y™ (статус: Доктор наук), 16 декабря 2016, 13:39 [#5]:
Цитата (enable23):
Скорее всего на 60 суток
Интересовало просто наличие этого лимита. Значение-то можно переменным сделать.
Ещё один плюс к моему простейшему варианту.
Если дата отсчёта - сегодня, то достаточно 1 комбобокса, который заполнять с учётом интервала и приёмных дней недели.
И всего делов.
Написать функцию на коленке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
enable23 (статус: Посетитель), 16 декабря 2016, 13:43 [#6]:
Да можно, если не затруднит Вас.
|
16 декабря 2016, 14:12: Статус вопроса изменён на решённый (изменил автор вопроса — enable23)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|