Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильное отображение повернутого текста [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]

Ну и где Мастера?


Наверх

Титульная страница Поиск, карта сайта Написать письмо