![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Народ, объесните мне суть Size у TFont'а... а вообще мне интересно как указать ширину символов...
|
|
#2
|
|||
|
|||
|
Поизменяй значение Size и все поймешь.
Код:
Form1.Canvas.Font.Size:=10;
showmessage(inttostr(Form1.Canvas.TextWidth('текст'))); |
|
#3
|
||||
|
||||
|
Рахмет за совет, но с математикой у мя туго
(какого чёрт я вообще за комп сел.. ), и зависимости я не уловил... сделал тупо Size:=width.. хз как надо, но прога каторую я накалякал и так на соплях держиться.. так что косяком больше косяком меньше ![]() |
|
#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. |