Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как вывести на Canvas надпись под углом

Delphi , Графика и Игры , Canvas

Как вывести на Canvas надпись под углом


{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 do
  begin
    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 с логфонтом как аргументом.

Некоторые ключевые моменты о коде:

  1. Вращение шрифтов: Код работает только для векторных шрифтов, что означает, что он может вращать TrueType и OpenType шрифты, но не растровые.
  2. Эксаптация: Поле lfEscapement структуры logfont определяет угол вращения шрифта. Значение 0 указывает на отсутствие вращения, а положительное или отрицательное значение specifies количество градусов для вращения шрифта против часовой стрелки или по часовой стрелке соответственно.

Вот пример использования этой функции:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if FontAngle <> 0 then
    Canvas.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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Canvas ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:12:43/0.0038599967956543/0