Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2008, 19:21
Аватар для SedmoiDemon
SedmoiDemon SedmoiDemon вне форума
Прохожий
 
Регистрация: 11.05.2008
Сообщения: 14
Репутация: 10
По умолчанию что за Size у TFont'а? :)

Народ, объесните мне суть Size у TFont'а... а вообще мне интересно как указать ширину символов...
__________________
Как тьма ищет без солнца свет,
Так свет ищет без мрака тьму...
Как жаль, что весь этот бред
Понятен лишь мне одному...
Ответить с цитированием
  #2  
Старый 11.06.2008, 19:58
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Поизменяй значение Size и все поймешь.

Код:
Form1.Canvas.Font.Size:=10;
showmessage(inttostr(Form1.Canvas.TextWidth('текст')));
Ответить с цитированием
  #3  
Старый 11.06.2008, 21:57
Аватар для SedmoiDemon
SedmoiDemon SedmoiDemon вне форума
Прохожий
 
Регистрация: 11.05.2008
Сообщения: 14
Репутация: 10
По умолчанию

Рахмет за совет, но с математикой у мя туго (какого чёрт я вообще за комп сел.. ), и зависимости я не уловил... сделал тупо Size:=width.. хз как надо, но прога каторую я накалякал и так на соплях держиться.. так что косяком больше косяком меньше
__________________
Как тьма ищет без солнца свет,
Так свет ищет без мрака тьму...
Как жаль, что весь этот бред
Понятен лишь мне одному...
Ответить с цитированием
  #4  
Старый 12.06.2008, 09:35
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Свойство 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  
Старый 19.06.2008, 00:47
Аватар для SedmoiDemon
SedmoiDemon SedmoiDemon вне форума
Прохожий
 
Регистрация: 11.05.2008
Сообщения: 14
Репутация: 10
По умолчанию

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  
Старый 19.06.2008, 01:27
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Можно несколько попроще:
Код:
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;
DrawText в модуле Windows.
Хорошо работает на TrueType (OpenType) шрифтах. "Times New Roman", например. А системные точечные и Windows их рендерит весьма погано. К тому же они фиксированные, поэтому, например, что 4, что 7 пунтктов - все равно будет 8.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 19.06.2008 в 01:41.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025