{Create a rotated font based on the font object F}function CreateRotatedFont(F : TFont; Angle : Integer) : hFont;
var
LF: TLogFont;
begin
FillChar(LF, SizeOf(LF), #0);
with LF dobegin
lfHeight := F.Height;
lfWidth := 0;
lfEscapement := Angle*10;
lfOrientation := 0;
if fsBold in F.Style then
lfWeight := FW_BOLD
else
lfWeight := FW_NORMAL;
lfItalic := Byte(fsItalic in F.Style);
lfUnderline := Byte(fsUnderline in F.Style);
lfStrikeOut := Byte(fsStrikeOut in F.Style);
lfCharSet := DEFAULT_CHARSET;
StrPCopy(lfFaceName, F.name);
lfQuality := DEFAULT_QUALITY;
{everything else as default}
lfOutPrecision := OUT_DEFAULT_PRECIS;
lfClipPrecision := CLIP_DEFAULT_PRECIS;
case F.Pitch of
fpVariable: lfPitchAndFamily := VARIABLE_PITCH;
fpFixed: lfPitchAndFamily := FIXED_PITCH;
else
lfPitchAndFamily := DEFAULT_PITCH;
end;
end;
Result := CreateFontIndirect(LF);
end;
...
{create the rotated font}if FontAngle <> 0 then
Canvas.Font.Handle := CreateRotatedFont(Font, FontAngle);
...
Вращаются только векторные шрифты.
Программный код, который вы предоставили, - это функция Delphi, созданная для создания вращенного шрифта на основе заданного объекта шрифта и угла. Функция использует Windows API для создания нового шрифта из структуры logfont, которая содержит информацию о высоте, ширине, эксаптации (вращения), ориентации, весе, статусе курсива, статусе подчеркивания, статусе стирания, наборе символов, имени шрифта, качестве, точности вывода и точности обрезки.
Функция используется в вашем приложении для вращения шрифта, когда переменная FontAngle не равна 0. Функция CreateRotatedFont создает новый.handle шрифта, вызывая функцию Windows API CreateFontIndirect с логфонтом как аргументом.
Некоторые ключевые моменты о коде:
Вращение шрифтов: Код работает только для векторных шрифтов, что означает, что он может вращать TrueType и OpenType шрифты, но не растровые.
Эксаптация: Поле lfEscapement структуры logfont определяет угол вращения шрифта. Значение 0 указывает на отсутствие вращения, а положительное или отрицательное значение specifies количество градусов для вращения шрифта против часовой стрелки или по часовой стрелке соответственно.
Вот пример использования этой функции:
procedureTForm1.Button1Click(Sender:TObject);beginifFontAngle<>0thenCanvas.Font.Handle:=CreateRotatedFont(Font,FontAngle);// Нарисуйте текст на канвасеCanvas.TextOut(10,20,'Hello, World!');end;
В этом примере, когда вы кликайте кнопку, она устанавливает переменную FontAngle в не равное 0 значение и затем вызывает функцию CreateRotatedFont, чтобы создать новый.handle шрифта с указанным углом вращения. Вращенный текст затем нарисуется на канвасе с помощью метода TextOut.
Обратите внимание, что вращение шрифтов с помощью этого кода может не работать идеально для всех типов шрифтов или под любым углом, поскольку оно зависит от того, насколько хорошо шрифт был спроектирован для вращения.
Надпись на Canvas можно вывести под углом с помощью функции создания вращающегося шрифта, которая изменяет параметры шрифта для получения необходимого наклона текста.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.