Экспертная система 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)
Текущее время: 16 ноября 2024, 15:28
Выполнено за 0.02 сек.