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

Delphi Sources



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

 
 
Опции темы Поиск в этой теме Опции просмотра
  #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, время: 13:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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