Для того чтобы вывести текст под углом, вытянуть или сжать его нужно воспользоваться структурой LOGFONT. Здесь показаны не все ее возможности, но, на мой взгляд, самые интересные.
procedure TForm1.FormPaint(Sender: TObject);
var
lf: TLogFont;
begin
FillChar(lf, SizeOf(lf), 0);
with lf dobegin// Высота буквы
lfHeight := 15;
// Ширина буквы
lfWidth := 20;
// Угол наклона в десятых градуса
lfEscapement := 100;
// Жирность 0..1000, 0 - по умолчанию
lfWeight := 1000;
// Курсив
lfItalic := 0;
// Подчеркнут
lfUnderline := 1;
// Зачеркнут
lfStrikeOut := 1;
// CharSet
lfCharSet := RUSSIAN_CharSet;
// Название шрифта
StrCopy(lfFaceName, 'Arial');
end;
with Form1.Canvas dobegin
FillRect(ClipRect);
Font.Handle := CreateFontIndirect(lf);
TextOut(0, 100, 'It is a text string');
end;
end;
Перевод контента на русский язык:
Код, который вы предоставили, написан на Delphi и использует структуру TLogFont, чтобы повернуть строку текста. Вот разбивка каждого шага кода:
Процедура FormPaint вызывается, когда форма necesita быть перерисована, например, при ее создании или изменении размера.
Переменная lf типа TLogFont объявляется и инициализируется нулями с помощью FillChar.
Свойства структуры TLogFont устанавливаются:
lfHeight: устанавливает высоту шрифта в пикселях (15 в этом случае).
lfWidth: устанавливает ширину шрифта в пикселях (20 в этом случае).
lfEscapement: устанавливает угол поворота в десятых частях градуса (100 в этом случае). Положительное значение повернет текст по часовой стрелке, а отрицательное - против часовой стрелки.
lfWeight: устанавливает вес шрифта (0-1000). 0 означает стандартный вес, а более высокие значения делают шрифт толще. В этом случае он установлен в 1000 для жирного шрифта.
lfItalic: устанавливает, является ли шрифт курсивным (0 - ложь, 1 - истина).
lfUnderline: устанавливает, должна ли текст быть подчеркнутой (0 - ложь, 1 - истина).
lfStrikeOut: устанавливает, должен ли текст иметь эффект стирания (0 - ложь, 1 - истина).
lfCharSet: устанавливает используемый набор символов (в этом случае - русские символы).
lFaceName: устанавливает имя шрифта для использования (Arial в этом случае). Строка копируется в буфер lFaceName с помощью StrCopy.
Объект канвы получается из формы и его свойства устанавливаются:
FillRect очищает всю прямоугольник канвы.
Font.Handle: устанавливает.handle шрифта, созданного с помощью CreateFontIndirect. Это будет применять настройки, установленные в шаге 3 к тексту, который вот-вот будет нарисован.
Строка текста 'It is a text string' рисуется на канве координатами (0, 100) с помощью метода TextOut.
Результат этого кода должен быть повернутым и стилизованным текстом на форме.
В качестве альтернативного решения можно использовать метод Canvas.TextRect, чтобы нарисовать текст с поворотом. Этот метод позволяет указать угол поворота в градусах, поэтому не нужно создавать custom font handle. Вот пример:
withForm1.CanvasdobeginFillRect(ClipRect);TextRect('It is a text string',0,100,Rotation:=45);// повернуть на 45 градусовend;
Обратите внимание, что этот метод не позволяет иметь точного контроля над свойствами шрифта, такими как вес и курсив. Если вам нужно более тонкий контроль, создание custom font handle с помощью CreateFontIndirect все еще является способом.
В статье описывается способ вращения текста под углом с помощью структуры LOGFONT и процедуры TForm1.FormPaint.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.