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

Создание многострочного текста с поворотом и параметрами шрифта в Delphi с использованием GDI и GDI+

Delphi , Синтаксис , Текст и Строки

В данной статье мы рассмотрим, как можно нарисовать многострочный текст с поворотом и заданными параметрами шрифта в приложениях Delphi, используя GDI и GDI+. Для этого нам понадобится текст, угол поворота, максимальная ширина прямоугольника, содержащего текст, и параметры шрифта (имя и высота).

Использование GDI

Для работы с GDI можно использовать свойства шрифта escapement и orientation. Вот пример кода на Object Pascal (Delphi), который демонстрирует, как это сделать:

procedure TForm1.PaintBox1Paint(Sender: TObject);
const
  Text = 'Ваш многострочный текст...';
var
  angle: Integer;
  Canvas: TCanvas;
  lf: LOGFONT;
  R: TRect;
begin
  Canvas := PaintBox1.Canvas;
  Canvas.Brush.Style := bsClear;
  lf := Default(LOGFONT);
  lf.lfHeight := 20;
  lf.lfCharSet := DEFAULT_CHARSET;
  lf.lfFaceName := 'Times New Roman';

  angle := 15; // Угол поворота в градусах
  lf.lfEscapement := 10*angle;
  lf.lfOrientation := lf.lfEscapement;
  Canvas.Font.Handle := CreateFontIndirect(lf);
  R := PaintBox1.ClientRect;
  R.Bottom := R.Bottom - 100; // Высота для обрезки, чтобы был виден поворот
  DrawText(Canvas.Handle, Text, -1, R, DT_NOCLIP or DT_WORDBREAK);
end;

Этот код создаст многострочный текст с поворотом, но качество может быть не очень хорошим, особенно если угол поворота велик или текст очень длинный.

Использование SetWorldTransform

Для более качественного результата можно использовать функцию SetWorldTransform, которая позволяет задать матрицу преобразования для всего канваса. Вот пример кода, демонстрирующего это:

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  angle: Integer;
  Transform: TXForm;
  Canvas: TCanvas;
  lf: LOGFONT;
  R: TRect;
begin
  Canvas := PaintBox1.Canvas;

  angle := 15;
  Transform := Default(TXForm);
  SinCos(DegToRad(-angle), Transform.eM12, Transform.eM11);
  Transform.eM22 := Transform.eM11;
  Transform.eM21 := -Transform.eM12;

  SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
  SetWorldTransform(Canvas.Handle, Transform);

  // Остальной код для создания текста с учетом установленной трансформации
end;

Использование GDI+

Для GDI+ результат также может быть не лучшим, и лучше всего использовать сторонние библиотеки. Вот пример кода для GDI+:

uses
  GDIPAPI, GDIPOBJ;
...
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  Graphics: TGPGraphics;
  Font: TGPFont;
  Brush: TGPBrush;
  lf: LOGFONT;
begin
  Graphics := TGPGraphics.Create(PaintBox1.Canvas.Handle);
  try
    // Настройка параметров рендеринга текста
    ...
    lf := Default(LOGFONT);
    // Настройка шрифта
    ...
    Graphics.RotateTransform(-15); // Применение поворота
    // Рисование текста
    Graphics.DrawString(
      Text,
      -1,
      Font,
      MakeRect(0.0, 150.0, 450.0, 600.0),
      nil,
      Brush
    );
  finally
    Graphics.Free;
  end;
end;

Рекомендация: Использование библиотеки graphics32

Для достижения наилучшего качества рекомендуется использовать библиотеку graphics32 с функцией GR32_Text. Эта библиотека позволяет легко рисовать текст с поворотом и поддерживает мультибайтовые символы, включая кириллицу, на более старых версиях Delphi.

Пример использования GR32_Text:

uses
  Graphics32;
...
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  TextMetrics: TTextMetrics;
begin
  with PaintBox1.Canvas do
  begin
    Font.Name := 'Arial';
    Font.Size := 20;
    Font.Color := clBlack;
    Brush.Style := bsClear;
    TextMetrics := TextOutEx('Текст для рисования', 10, 10, [tfRotate], angle);
  end;
end;

Использование GR32_Text позволяет достичь более качественного результата по сравнению с встроенными функциями GDI и GDI+.

Заключение

В данной статье мы рассмотрели различные способы создания многострочного текста с поворотом и параметрами шрифта в Delphi, используя GDI и GDI+. Несмотря на то, что встроенные функции могут дать приемлемый результат, для достижения наилучшего качества рекомендуется использовать сторонние библиотеки, такие как graphics32 с GR32_Text.

Создано по материалам из источника по ссылке.

В данном тексте описывается процесс создания многострочного текста с поворотом и заданными параметрами шрифта в среде разработки Delphi, используя возможности GDI и GDI+, а также рассматривается использование сторонней библиотеки для улучшения качества о


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Текст и Строки ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 09:00:23/0.0034809112548828/0