В вопросе пользователя рассматривается задача определения координат вершин прямоугольника, ограничивающего повернутый текст, без его фактического отображения на экране. Решение должно быть применимо как при использовании GDI (Device Independent Bitmap), так и GDI+ (Graphics Device Interface Plus) в приложениях Delphi.
GDI
Для начала рассмотрим решение задачи с использованием GDI. В этом случае можно использовать функцию TextExtent, которая возвращает размеры текста в пикселях. Для определения координат вершин прямоугольника необходимо выполнить следующие шаги:
var
tsiz: TSize;
ang: Double;
tpts: array[0..4] of TPoint;
begin
tsiz := Form1.Canvas.TextExtent(t); // tsiz: tagSIZE
ang := (2.0 * Pi * StrToInt(Edit1.Text)) / 360; // ang: double
tpts[0].X := 100; // Начальная точка (центр)
tpts[0].Y := 100;
tpts[1].X := 100 + Round(tsiz.cx * Cos(ang)); // Вершина, смещённая по оси X
tpts[1].Y := 100 + Round(tsiz.cy * Sin(ang)); // Исправлено на tsiz.cy
tpts[2].X := tpts[1].X - Round(tsiz.cy * Sin(ang));
tpts[2].Y := tpts[1].Y + Round(tsiz.cy * Cos(ang));
tpts[3].X := tpts[0].X - Round(tsiz.cy * Sin(ang));
tpts[3].Y := tpts[0].Y + Round(tsiz.cy * Cos(ang));
tpts[4] := tpts[0]; // Закрытие фигуры
// tpts теперь содержит координаты вершин прямоугольника
end;
GDI+
Для GDI+ задача упрощается, так как есть функция MeasureString, которая возвращает прямоугольник, ограничивающий текст. После применения трансформаций к графическому контексту, координаты этого прямоугольника будут соответствовать требуемым.
Пример кода на Object Pascal (Delphi):
var
sft: IGPStringFormat;
mRect: TGPRectF;
begin
sft := TGPStringFormat.GenericDefault; // sft: IGPStringFormat
mRect := gr.MeasureString(t, ft, pp, sft); // mRect: TGPRectF
// Выполнить этот код после трансформаций
// mRect теперь является прямоугольником, ограничивающим текст
// mRect уже учитывает трансформации, выполненные над gr
end;
Обратите внимание, что при использовании GDI+ необходимо учитывать, что трансформации, применяемые к графическому контексту, также повлияют на координаты прямоугольника, возвращаемого функцией MeasureString.
В обоих случаях, для учета выравнивания текста, необходимо соответствующим образом скорректировать координаты вершин прямоугольника.
Задача заключается в определении координат вершин прямоугольника, который ограничивает повернутый текст, без его фактического отображения на экране, используя GDI или GDI+ в приложениях Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS