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

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