- •Задача 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. База данных "Расходы"
Задание 22. Приветствие
Демонстрирует вывод текста на поверхность формы (Рис. 29). Следует обратить внимание на то, что вне зависимости от размера шрифта, который используется для вывода приветствия, текст всегда размещается в центре окна, даже в том случае, если пользователь во время работы программы изменит размер окна.
Рис 29
Вывод: В этой задаче мы научились создавать приветствие без использования каких либо компонентов.
Листинг
Graphics::TBitmap *bgp; // фоновый рисунок AnsiString sMonth[] = ("","января","февраля","марта", "апреля","мая","июня", "июля","августа","сентября", "октября","ноября","декабря"}; // конструктор формы fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) { bgp = newGraphics::TBitmap(); try bgp->LoadFromFile("sky.tamp"); Графика 83 c a t c h (EFOpenError &e) // обработка событияPaint void fastcall TForml::FormPaint(TObject *Sender) { int h; // текущее время(часы) AnsiString mes; //сообщение int wt,ht; // размер (ширина и высота) области // выводатекста int х,у; // координаты области выводатекста h = HourOf( Now() ); if ( h <= 4 ) mes = "Доброй ночи!"; else if ( h < 12 ) mes = "Доброе утро!" ; else if ( h <= 16) mes = "Добрый день!" ; else mes = "Добрый вечер!"; Forml->Font->Name = "Times New Roman"; //Forml->Font->Color = clBlue; Forml->Canvas->Font->Size = 20; // определитьразмер области вывода текста wt • Canvas->TextWidth(mes); ht = Canvas->TextHeight(mes); x = (ClientWidth - wt) / 2; у = ClientHeight / 2 - ht; // фоновая картинка Canvas->Draw(0,0,bgp); // чтобы область вывода текста была прозрачной 84 Часть 1.Примерыи задачи Canvas->Brush->Style = bsClear; Canvas->TextOutA(x,y,mes); у = у + ht; // координата нижней границы // области вывода текста // дата и день недели mes = FormatDateTime("Сегодня d", Ncw() ); mes = mes + " " + sMonth[MonthOf( Now())] + ", " FormatDateTime("dddd", Now() ); /* размер шрифта вывода даты на 4 пунктаменьше размера шрифта приветствия */ Canvas->Font->Size -= 4; wt = Canvas~>TextWidth(mes); ht = Canvas->TextHeight(mes); x = (ClientWidth - wt) / 2; У = У + 6; Canvas->TextOutA(x,у,mes); // пользователь изменил размер формы void fastcall TForml::FormResize(TObject *Sender) { Forml->Refresh(); // перерисовать окно
Задача 23. Олимпийский флаг
Программа Олимпийский флаг(Рис. 30) демонстрирует вывод графики на поверхность формы.
Рис 30
Вывод: При выполнении этого задания мы научились создавать изображение путем ввода команд и без помощи компонентов.
Листинг
// конструктор формы fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) \ { Canvas->Font->Name = "Tahoma"; Canvas->Font->Size = 12; void fastcall TForml::FormPaint(TObject *Sender) { tdefine WB 140 // ширина полотнища #define HB 80 // высота полотнища #define D 36 // диаметрколец i int x,y; AnsiString st = "Быстрее, выше, сильнее!"; // вычислить координаты левого верхнего угла флага х = (ClientWidth - WB) / 2; у = (ClientHeight - HB ) / 2 - Canvas->Font->Size; //полотнище Canvas->Brush->Color = (TColor) RGB(255,255,255); Canvas->FillRect( Rect(x,y,x+WB,y+HB) ); 86 Часть 1.Примерыи задачи int xl = (ClientWidth - Canvas->TextWidth(st)) / 2; /* Чтобы область вывода текста не была закрашена цветом фона, а также чтобы метод Ellipse рисовал окружность,а не круг, значение свойства Brush->Styleдолжно быть равно bsClear */ Canvas->Brush->Style = bsClear; // девиз Canvas->TextOutA(xl,y+HB+6,st); Canvas->Pen->Width = 2; // ширина колец - два пиксела // первый ряд колец /•/ 3.2 * D - ширина области, занимаемой кольцами 1-го // ряда х = х + (WB - 3.2 * D) / 2; y = y + ( H B - 1 . 6 * D ) / 2 ; Canvas->Pen->Color = (TColor) RGB(0,0,225); // синий Canvas->Ellipse(x,y,x+D,y+D); x = x + 1.1* D,- Canvas->Pen->Color = clBlack; Canvas->Ellipse(x,y,x+D,y+D); // черный X = x + 1.1 * D; Canvas->Pen->Color = (TColor) RGB(255,0,0); // красный Canvas->Ellipse(x,y,x+D,y+D); // второй ряд колец x = x - D * 0.55; у = у + 0.6 * D; Canvas->Pen->Color = (TColor) RGB(0,128,0); // зеленый Canvas->Ellipse(x,y,x+D,y+D); Графика 87 X = X - 1.1 * D; Canvas->Pen->Color = (TColor) RGB(250,217,25); Canvas->Ellipse(x,y,x+D,y+D); // желтый // пользователь изменил размер окна void fastcall TForml::FormResize(TObject *Sender) { Forml->Refresh();
