Показать сообщение отдельно
  #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.
__________________
Не забывайте делать резервные копии
Ответить с цитированием