Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет мой.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Задание 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();