![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильное отображение повернутого текста [D5, Win2k]
Navi © (2004-09-19 09:55:00)Здравствуйте!
Делаю тестовый пример:
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. Вообще же мне нужно отобразить текст верной высоты и посчитать координаты охватывающего прямоугольника.
Спасибо.
Defunct (2004-09-20 19:32:00) [1]рисуйте текст горизонтально на битмапе большего размера.
поворачивайте Bitmap вручную с масштабированием под требуемую высоту. Апроксимация цвета точек, которые получаются зполненными наполовину, кажется осуществляется процедурой StretchDraw в полной мере. Если я ошибаюсь насчет апроксимации, тогда вам придется подправить некоторые детали рисунка самостоятельно.
Navi (2004-09-20 19:12:00) [2]Ну и где Мастера?