- •Задача 1. Конвертер
- •Задача 2. Фунты-килограммы
- •Задача 3. Сила тока.
- •Задача 4. Сопротивление
- •Задача 5. Кафе
- •Задача 6. Любимый напиток
- •Задача 7. Электроэнергия
- •Задание 8. Осаго
- •Задание 9.Просмотр иллюстраций
- •Задача 10. Калькулятор
- •Задача 11. Калькулятор-2
- •Задача 12.Секундомер
- •Задача 13. Угадай число
- •Задание 14.Угадай число-2
- •Задание 15.Запуск Internet Explorer
- •Задание 16.Конвертор
- •Задание 17.Конвертор 2
- •Задание 18.Погода
- •Задание 19.Средняя температура
- •Задание 20. Простая база данных
- •Задание 21. Редактор текста
- •Задание 22. Приветствие
- •Задача 23. Олимпийский флаг
- •Задание 24. Диаграмма
- •Задача 26. Круговая диаграмма.
- •Задача 27. Просмотр иллюстраций.
- •Задача 28 .Часы
- •Задача 29. Пинг понг.
- •Задача 30. Полет в облаках
- •Задача 31.Баннер
- •Задача 32. Фоновый рисунок
- •Задача 33. Wav
- •Задача 34. Mp3 Player
- •Задача 35.Воспроизведение midi
- •Задача 36.Compact Disk Player (версия 1)
- •Задача 37.Compact Disk Player (версия 2)
- •Задача 38.VideoPlayer
- •Задача 39. Анимация
- •Задача 40. Записная книжка
- •Задача 41 Магазин
- •Задача 42. Ежедневник
- •Задача 43. Сапер
- •Часть 1. Примеры и задачи
- •Часть 1. Примеры и задачи
- •Задача 44 Игра 15
- •Часть 1. Примеры и задачи
- •Задача 45. Игра "Собери картинку" (Puzzle)
- •Задача 46 Игра "Парные картинки"
- •Задача 47. Экзаменатор
- •Задача 48. Экзаменатор-2
- •Задача 49. Календарь
- •Задача 50. Будильник
- •Задача 51. Очистка диска
- •Задача 52.Печать
- •Задачи для самостоятельного решения Задача 1. Скидка
- •Задача 2.Доход по вкладу
- •Задача 3. Таблица умножения
- •Задача 4.Поездка на автомобиле
- •Задача 5.Стоимость разговора
- •Задача 6. Стеклопакет
- •Задача7. Калькулятор
- •Задача 8. Электроэнергия
- •Задача 9. Добрый день
- •Задача 10. Часы
- •Задача 11. Узоры
- •Задача 12. Курс доллара
- •Задача 13. Диаграмма
- •Задача 14. Домашние животные
- •Задача 15. Кораблик
- •Задача 16. Сапер
- •Задача 17 .Экзаменатор
- •Задача 18. База данных "Расходы"
Задача 49. Календарь
Программа Календарь (Рис. 59)выводит изображение календаря на текущий месяц. Имеется возможность задать праздничные дни. Демонстрирует вывод графики на поверхность формы, работу с функциями манипулирования датами. Форма и окно программы приведены на рис. 1.75. Как видно, заголовок окна во время работы программы не отображается (значение свойства Borderstyle равно bsNone), однако пользователь все-таки может переместить окно, "захватив" мышью сам календарь. Непосредственное перемещение календаря (окна программы) выполняет функция обработки события Mouseup, которое возникает в момент отпускания кнопки мыши.
Рис 59
Вывод: В этом задании мы создали Календарькоторый выводит изображение календаря на текущий месяц.
Листинг
fastcall TForml::TForml(TComponent* Owner) : TForm(Owner)
{
DecodeDate (Now() , aYear, aMonth, aDay) ,UpDownl->Position = aMonth; #ifdef BACKIMAGE // загрузкафоновойкартинки backimage = new Graphics::TBitmap(); try { backimage->LoadFromFile("back.bmp"); } catch (EFOpenError &e) { return; } #endif
// возвращаетстроковоепредставлениедвузначногочисла •// сведущемнулем: 01, 02 ит.д. AnsiString fastcall IntToStr_(int i) { AnsiString s; if ( IntToStr(i).Length() ==1) s = "0"+IntToStr(i); else s = IntToStr(i); return s;
// обработкасобытия Paint - вывестикалендарь void fastcall TForml::FormPaint(TObject *Sender)
Игры и другие полезные программы 243
{
Word aDayOfWeek; // деньнедели AnsiString st; // датавформате dd.mm
int x, у, dx< dy, // шаг столбцов и строк цифр хО,уО; // левый верхний угол области вывода календаря int i;
хО = 50; уО = 40; dx = 20; dy = 20;
Caption - "Календарь " + IntToStr(aYear);
#ifdef BACKGROUND Canvas->Brush->Color = clBackground; #endif
#ifdef BACKIMAGE Canvas->Draw(0, 0,backimage) ,#else Canvas->Pen->Color = Canvas->Brush->Color; Canvas->Rectangle(O,O,ClientWidth,ClientHeight); #endif // вывестикалендарьнатекущиймесяц Canvas->Brush->Style = bsClear; Canvas->Font->Size = 12; Canvas->Font->Color = clBlack; Canvas->TextOutA(xO,yO-35, stMonth[aMonth-1]);
Canvas->Font->Size = 10;
// первая колонка - название дней недели х = хО - 30;
244 Часть 1. Примерыизадали
У = уО; for ( i = 0; i < 7; i++) { if ( i < 5 ) Canvas->Font->Color • clBlack; else Canvas->Font->Color • clRed;
Canvas->TextOutA(x,y, stDayfi]); У += dy;
/* определим день недели, с которого начинается месяц */ aDayOfWeek = DayOfTheWeek( EncodeDate(aYear,aMonth,1))
x = xO; у = yO + dy * (aDayOfWeek-1);
for ( i = 1; i <= DaysInAMonth(aYear,aMonth); i++ ) { // проверим, неявляетсялиденьпраздничным st = IntToStr_(i) + "." + IntToStr_(aMonth); if ( holiday.Pos(st) 1=0 ) Canvas->Font->Color = clRed; // праздничный else // обычный if ( aDayOfWeek <б ) Canvas->Font->Color = clBlack; else // субботаиливоскресенье Canvas->Font->Color = clRed;
Canvas->TextOutA(x,у, IntToStr(i));
if ( i »« aDay) {
Игры и другие полезные программы 245
// выделить сегодняшнее число // рамка Canvas->Brush->Style = bsClear; Canvas->Pen->Color = clGray; Canvas->Rectangle(x-3,y-1,x+dx-2,y+dy-1);
if ( aDayOfWeek != 7 ) {
У += dy; aDayOfWeek ++;
} else { aDayOfWeek =1; x += dx; У = yO;
// щелчокнакнопкекомпонента UpDown void fastcall TForml::UpDownlClick(TObject *Sender, TUDBtnType Button)
switch (UpDownl->Position) { case 0 : UpDownl->Position = 12; aYear--; break; case 13: UpDownl->Position = 1; aYear++; ,- break;
aMonth = UpDownl->Position; Paint(); // обновитькалендарь
}
// отпущенакнопкамыши void fastcall TForml::ForrriMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
246 Часть 1. Примеры и задачи
// переместить окно в ту точку экрана, // в которой находится указатель мыши Forml->Left = Forml->Left + X; Forml->Top = Forml->Top + Y;
// нажатиеклавиши void fastcall TForml::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
if ( Key == 27) // клавиша <Esc> Forml->Close(); // завершить работу программы
