Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизПравильное отображение повернутого текста Найти похожие ветки
← →
Navi (2004-09-19 09:55) [0]Здравствуйте!
Делаю тестовый пример:
function CreateRotatedFont(FontName: String; Height, Angle: Double; Bold, Italic: Byte): hFont;
var
LF: TLogFont;
begin
FillChar(LF, SizeOf(LF), #0);
with LF do
begin
lfHeight:= Round((Height / 25.4) * GetDeviceCaps(GetDC(0), LOGPIXELSY));
lfWidth:= 0;
lfEscapement:= Round(Angle * 10);
lfOrientation:= 0;
if Bold = 0 then lfWeight:= FW_NORMAL else lfWeight:= FW_BOLD;
lfItalic:= Italic;
lfUnderline:= 0;
lfStrikeOut:= 0;
lfCharSet:= DEFAULT_CHARSET;
StrPCopy(lfFaceName, FontName);
lfQuality:= DEFAULT_QUALITY;
lfOutPrecision:= OUT_DEFAULT_PRECIS;
lfClipPrecision:= CLIP_DEFAULT_PRECIS;
lfPitchAndFamily:= DEFAULT_PITCH;
end;
Result:= CreateFontIndirect(LF);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Handle:= CreateRotatedFont("Arial", 5.0, 0.0, 0, 0);
Canvas.TextOut(10, 10, "QweRty");
Canvas.Font.Handle:= CreateRotatedFont("Arial", 5.0, 45.0, 0, 0);
Canvas.TextOut(10, 75, "QweRty");
end;
Цвет фона под текстом заполнен белым. Этот "фоновый" прямоугольник определяет охватывающий прямоугольник текста. Высота этого прямоугольника для текста, повернутого на 0 градусов и на 45 градусов = 18 пиксел, только для прямого текста это "вертикальные" пикселы, а для наклонного - "диагональные". Т.о. реальная высота фонового прямоугольника для повернутого текста (при угле = 45) = высота фонового прямоугольника прямого текста * 1,41. Так же для повернутого текста нарушено положение самого текста относительно этого фонового прямоугольника. Как это лечить?
P.s. Вообще же мне нужно отобразить текст верной высоты и посчитать координаты охватывающего прямоугольника.
Спасибо.
← →
Navi (2004-09-20 19:12) [1]Ну и где Мастера?
← →
Defunct © (2004-09-20 19:32) [2]рисуйте текст горизонтально на битмапе большего размера.
поворачивайте Bitmap вручную с масштабированием под требуемую высоту. Апроксимация цвета точек, которые получаются зполненными наполовину, кажется осуществляется процедурой StretchDraw в полной мере. Если я ошибаюсь насчет апроксимации, тогда вам придется подправить некоторые детали рисунка самостоятельно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c