![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Народ, объесните мне суть Size у TFont'а... а вообще мне интересно как указать ширину символов...
Как тьма ищет без солнца свет, Так свет ищет без мрака тьму... Как жаль, что весь этот бред Понятен лишь мне одному... |
#2
|
|||
|
|||
![]() Поизменяй значение Size и все поймешь.
Код:
Form1.Canvas.Font.Size:=10; showmessage(inttostr(Form1.Canvas.TextWidth('текст'))); |
#3
|
||||
|
||||
![]() Рахмет за совет, но с математикой у мя туго
![]() ![]() ![]() Как тьма ищет без солнца свет, Так свет ищет без мрака тьму... Как жаль, что весь этот бред Понятен лишь мне одному... |
#4
|
|||
|
|||
![]() Свойство Size у TFont - это размер шрифта в пунктах (типографский термин, английское - point, 1/72 дюйма). Характеризует высоту (не ширину) прямоугольника, который занимают символы шрифта. Естественно, что при изменении размера шрифта (Size) пропорционально изменяется и ширина символов, но эти пропорции "зашиты" в шрифт и изменить их невозможно.
Для примера можно посмотреть свойтво Font у TEdit, расположив этот компонент на форме. В свойстве Font есть и свойство Size, которое отвечает за величину шрифта. Меняя его значение можно увидеть как изменяется шрифт в TEdit. Типичные значения: 8, 10, 12... "Size:=width" присвоит размеру шрифта ширину формы, если "width" - это ширина формы, т.е. такой размер непомерно большой. Ширину символа изменить нельзя. Можно только изменять расстояние между символами (кернинг), но Windows этим не занимается, надо самому делать. Не забывайте делать резервные копии Последний раз редактировалось san-46, 12.06.2008 в 09:45. |
#5
|
||||
|
||||
![]() san-46 и ART, рахмет большой за разъеснения.
Суть дела в том чтобы я на прямоугольнике с помощью TCanvas писал текст, но так, чтобы в зависимости от програмно изменяемых размеров прямоугольника, изменялся размер шрифта, чтобы текст заполнял как можно большее пространство прямоугольника и при этом коректно отображался.. набросал такую функцию: Код:
function SetSizeToFont(Canvas: TCanvas; const Width, Heigth:integer; const S: string):integer; //Canvas - указывал изначальный Canvas, со стилем шрифта, хз можно //проще.. не было желания :) //Width, Heigth - ну толщина и длинорослость... //S - текст //result - необходимый размер шрифта.. вроде фурычет функция :) var c:boolean; f:integer; begin f:=0; c:=true; while c = true do begin inc(f); Canvas.Font.Size:=f; if (Canvas.TextWidth(s)>=Width) then c:=false; end; c:=true; f:=Canvas.Font.Size; if Canvas.TextWidth(s)>Width then while c = true do begin f:=f-1; Canvas.Font.Size:=f; if Canvas.TextWidth(s)<=Width then c:=false; end; c:=true; f:=Canvas.Font.Size; if Canvas.TextHeight(s)> Heigth then while c = true do begin f:=f-1; Canvas.Font.Size:=f; if Canvas.TextHeight(s)<=Heigth then c:=false; end; result:=Canvas.Font.Size; end; Как тьма ищет без солнца свет, Так свет ищет без мрака тьму... Как жаль, что весь этот бред Понятен лишь мне одному... |
#6
|
|||
|
|||
![]() Можно несколько попроще:
Код:
function SetSizeToFont(Canvas: TCanvas; const Width, Heigth:integer; const S: string):integer; var R : TRect; begin Result := 0; R := Rect(0, 0, Width, Heigth); repeat Inc(Result); Canvas.Font.Size := Result; DrawText(Canvas.Handle, PChar(S), -1, R, DT_CALCRECT); until (R.Right > Width) or (R.Bottom > Heigth); Dec(Result, 2); //2 - значение подобрано экспериментально end; Хорошо работает на TrueType (OpenType) шрифтах. "Times New Roman", например. А системные точечные и Windows их рендерит весьма погано. К тому же они фиксированные, поэтому, например, что 4, что 7 пунтктов - все равно будет 8. Не забывайте делать резервные копии Последний раз редактировалось san-46, 19.06.2008 в 01:41. |