Программирование с C++ Builder



Текст



Вывод текста (строк типа Ansistring) на поверхность графического объекта обеспечивает метод TextOutA. Инструкция вызова метода TextoutA в общем виде выглядит следующим образом:

Canvas->TextOutA(x,y,TeKCT)

Параметр текст задает выводимый текст. Параметры х и у определяют координаты точки графической поверхности, от которой выполняется вывод текста (рис. 3.6).



Рис. 3.6. Координаты области вывода текста


Шрифт, который используется для вывода текста, определяется значением свойства Font соответствующего объекта canvas. Свойство Font представляет собой объект типа TFont. В табл. 3.4 перечислены свойства объекта TFont, определяющие характеристики шрифта, используемого методом TextoutA для вывода текста.

Таблица 3.4. Свойства объекта TFont


Свойство

Определяет

Name

Используемый шрифт. В качестве значения следует использовать название шрифта (например, Arial)

Size

Размер шрифта в пунктах (points). Пункт— это единица измерения размера шрифта, используемая в полиграфии. Один пункт равен 1/72 дюйма

Style

Стиль начертания символов. Может быть: нормальным, полужирным, курсивным, подчеркнутым, перечеркнутым. Стиль задается при помощи следующих констант: fsBold (полужирный), fsltalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый)

Свойство style является множеством, что позволяет комбинировать необходимые стили. Например, инструкция, которая устанавливает стиль "полужирный курсив", выглядит так:

Canvas->Font->Style = TFontStyles ( ) <<fsBold<<f sUnderline

Color

Цвет символов. В качестве значения можно использовать константу типа TColor


При выводе текста весьма полезны методы Textwidth и TextHeight, значениями которых являются соответственно ширина и высота области вывода текста, которые, очевидно, зависят от характеристик используемого шрифта. Обоим этим методам в качестве параметра передается строка, которую предполагается вывести на поверхность методом TextoutA.

Следующий фрагмент кода демонстрирует использование методов, обеспечивающих вывод текста на поверхность формы. Приведенная функция обработки события OnPaint закрашивает верхнюю половину окна белым, нижнюю — голубым цветом, затем в центре окна, по границе закрашенных областей, выводит текст (рис. 3.7).

void _fastcall TForml::FormPaint(TObject *Sender)
{
AnsiString ms = "Borland C++Builder";
TRect aRect;
int x,y; // точка, от которой будет выведен текст
// верхнюю половину окна красим белым
aRect = Rect(0,0,ClientWidth,ClientHeight/2);
Canvas->Brush->Color = clWhite;
Canvas->FillRect(aRect);
// нижнюю половину окна красим голубым
aRect = Rect(0,ClientHeight/2,ClientWidth,ClientHeight);
Canvas->Brush->Color = clSkyBlue;
Canvas->FillRect(aRect);
Canvas->Font->Name = "Times New Roman";
Canvas->Font->Size = 24;
// Canvas->Font->Style = TFontStyles ()« fsBold « fsItalic;
// текст разместим в центре окна
х = (ClientWidth - Canvas-XTextWidth(ms)) /2;
у = ClientHeight/2 - Canvas-XTextHeight(ms) /2;
Canvas->Brush->Style = bsClear; // область вывода текста
// не закрашивать
Canvas->Font->Color = clBlack; Canvas->TextOutA(x,y,ms);
// вывести текст
}



Рис. 3.7. Вывод текста


Иногда требуется вывести какой-либо текст после сообщения, длина которого во время разработки программы неизвестна. В этом случае необходимо знать координаты правой границы области выведенного текста. Координаты правой границы текста, выведенного методом TextOutA, можно получить, обратившись к свойству penPos.

Следующий фрагмент кода демонстрирует возможность вывода строки текста при помощи двух инструкций TextOutA:

Canvas->TextOutA(10,10,"Borland ");
Canvas->TextOutA(Canvas->PenPos.x, Canvas->PenPos.y, "C++Builder");

Книжный магазин