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



Вопросы
  Номер строки в memo под курсором
   Категория: Текст и строки
  Как соединить несколько файлов в один
   Категория: Текст и строки
  Шифрование текста по паролю
   Категория: Текст и строки
  Создание кнопки на панели в IE
   Категория: Интернет и Сети
  Компоненты TrackBar и ScrollBar
   Категория: Компоненты
  Что значит Paramstr
   Категория: Приложение
  Как закачать файл из Интернета
   Категория: Интернет и Сети

Delphi - База Знаний: Как нарисовать календарь

  << Вернуться к Содержанию  

const year = 2002; // Год календаря

var months: array [1..12] of byte;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Caption := 'Календарь на ' + IntToStr(year) + ' год';
  Form1.Color := clWhite;
  // Длины месяцев:
  months[1] := 31;
  months[2] := 28 + ord(IsLeapYear(year));
  months[3] := 31;
  months[4] := 30;
  months[5] := 31;
  months[6] := 30;
  months[7] := 31;
  months[8] := 31;
  months[9] := 30;
  months[10] := 31;
  months[11] := 30;
  months[12] := 31;
end;

procedure TForm1.FormPaint(Sender: TObject);
const // Настройки размеров календаря:
  MonthDX = 150;
  MonthDY = 135;
  DayDX = 20;
  DayDY = 15;
  MonthH = 20;
var
  month, i: integer;
  day: integer;
  s: string[2];
begin
  with Form1.Canvas do for month := 1 to 12 do begin
    // Вывод названия месяца:
    Font.Name := 'Times';
    Font.Size := 13;
    TextOut((month - 1) mod 3 * MonthDX, (month - 1) div 3 * MonthDY,
      LongMonthNames[month]);

    Font.Name := 'Courier';
    Font.Size := 8;
    // Вывод названий дней недели:
    for day := 1 to 7 do
      TextOut((month - 1) mod 3 * MonthDX,
        day mod 7 * DayDY + (month - 1) div 3 * MonthDY + MonthH,
        ShortDayNames[(day + 1) mod 7 + 1]);

    // Определение дня недели первого числа месяца:
    day := DayOfWeek(EncodeDate(year, month, 1)) - 2;
    if day < 0 then inc(day, 7);
    // Вывод чисел:
    for i := 1 to months[month] do begin
      str(i: 2, s);
      TextOut(day div 7 * DayDX + (month - 1) mod 3 * MonthDX + DayDX,
        day mod 7 * DayDY + (month - 1) div 3 * MonthDY + MonthH, s);
      inc(day);
    end;
  end;
end;
  << Вернуться к Содержанию