Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 17:15   #1
finder_sl
 
Регистрация: 02.03.2010
Сообщений: 9
По умолчанию Неадекватная работа TextWidth

Доброго времени суток!
Вот в чем вопрос...
Есть программа, которая должна нарисовать табличку(скриншот прилагается) и заполнить ее значениями. Так вот, написал функцию, которая подбирает нужный размер шрифта, чтобы текст поместился.
Вот она:
Код:
function TMain.getFontSize(width, height, procentZapolnenia: integer; text:string): integer;
var i: integer;
begin
i:=1;
repeat
can.Canvas.Font.Size:=i;
i:=i+1;

until ((can.Canvas.TextWidth(text)>(trunc(abs(width)*procentZapolnenia/100)))or(can.Canvas.TextHeight(text)>(trunc(abs(height)*procentZapolnenia/100))));

Result:=i-1;
end;
В параметрах widht и height - ширина и высота ячейки, в которую вписываем, procentZapolnenia - процент заполнения ячейки, text - текст для которого будем определять размер шрифта.
Так вот работает она почему то совершенно неадекватно: для первой ячейки она выбирает слишком большой шрифт. Более того, для случаев, когда длина text равна не 2м символам, все работает прекрасно...
Пробовал вставлять трассировочный ShowMessage в цикл, там совсем все грустно... Сначала ширина шрифта растет пропорционально его размеру, а затем начинает прыгать влево-вправо...
Помогите разобраться!!

Последний раз редактировалось finder_sl; 22.06.2010 в 21:02.
finder_sl вне форума Ответить с цитированием
Старый 22.06.2010, 20:33   #2
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

отладчиком по программе пройдись.


trunc(abs(width) --ширина кого, чего?
trunc(abs(height)--высота кого,чего?
За помощь: Нажмите на весы слева от сообщения!

Последний раз редактировалось savva; 22.06.2010 в 20:38.
savva вне форума Ответить с цитированием
Старый 22.06.2010, 20:39   #3
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Код:
can.Canvas.Font.Size:=116;
А это что?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 22.06.2010, 21:02   #4
finder_sl
 
Регистрация: 02.03.2010
Сообщений: 9
По умолчанию

для savva:
Отладчиком ходил... Все ходит как положено.. Единственный косяк я написал.. Его видно если вставить ShowMessage внутрь цикла...

width и height написано вроде... Ширина и высота ячейки, куда вписываем...

для ex.cluz:
прозевал... Это пока отлаживал написал... Исправил как надо... по прежнему не работает((
finder_sl вне форума Ответить с цитированием
Старый 22.06.2010, 21:08   #5
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

ты ячейки рисовал что ли?или где стандартный StringGrid?
что за can.canvas??к чему относится can?возможно и trunc должен относится к can?

полный код приведи сюда ни черта не понятно.
За помощь: Нажмите на весы слева от сообщения!
savva вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas.TextWidth и размер системного шрифта Diogo76 Общие вопросы Delphi 2 23.02.2010 19:36
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00