Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить среднюю ширину символа шрифта? TFont 
:(
    Опции темы
Hacker
Дата 9.4.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.3.2006

Репутация: нет
Всего: нет




Подскажите кто знает. Имеется шрифт типа TFont. Надо определить среднюю ширину одного символа. Или хотябы среднее отношение ширины к высоте.
PM MAIL   Вверх
Matematik
Дата 9.4.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 1
Всего: 50



Не знаю.
Но может сойдет Canvas.TextWidth() и Canvas.TextHeight()
PM MAIL WWW ICQ   Вверх
Демо
Дата 9.4.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Среднюю ширину символа можно определить только относительно к конкретной канве. Например, для Form1:

Код

var
  s: String;
  R: TRect;
begin
  s := 'qwertyuiopasdfghjklzxcvbnm'+
       'QWERTYUIOPASDFGHJKLZXCVBNM'+
       'йцукенгшщзхъёфывапролджэячсмитьбю'+
       'ЙЦУКЕНГШЩЗХЪЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
  DrawText(
    Form1.Canvas.Handle,
    PChar(s),
    Length(s),
    R,
    DT_CALCRECT);
  ShowMessage('Средняя ширина символа: '+IntToStr((R.Right-R.Left) div Length(s)));



Для любого окна вместо Form1.Canvas.Handle нужно использовать:

Код

var
  DC: HDC;
begin
  DC := GetDC(HWND);
//Далее точно так же
  ...
  ReleaseDC(HWND,DC)
end;


Добавлено @ 21:14
R.Bottom - R.Top вернет высоту шрифта.

Это сообщение отредактировал(а) Демо - 9.4.2006, 21:13


--------------------
    
PM MAIL ICQ Skype   Вверх
Hacker
Дата 9.4.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Спасибо за ответы, но боюсь мне это не подойдёт, т.к. нету там канвы, где мне Это применить надо. Но где-то в недрах шрифта должна содержаться информация об отношении ширины к высоте или "сжатие", не знаю как точно называется... Как бы её оттуда выковырять.
PM MAIL   Вверх
Демо
Дата 9.4.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Цитата(Hacker @ 9.4.2006, 21:20 Найти цитируемый пост)
т.к. нету там канвы, где мне Это применить надо.


Тогда какой смысл говорить об отношении ширины к высоте?
На канве может быть разное количество пикселей по высоте и ширине. Тогда вообще ни о каком соотношении без канвы речи не может быть.


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 9.4.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Вообще-то у большинства шрифтов нет фиксированного отношения ширины к высоте.
Высота для всех символов одинаковая, а вот ширина как правило нет.
А то, что канвы нет, так это не проблема.
Создаем битмап, ассоциируем с нашим шрифтом и вычисляем значения для его канвы.
Потом просто его убиваем.
PM MAIL   Вверх
Girder
Дата 10.4.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



GetCharWidth32/GetCharWidth/GetCharABCWidths

Один из примеров использывания: http://forum.vingrad.ru/index.php?showtopi...st&p=415543



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Hacker
Дата 11.4.2006, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Спасибо Girder, попробую как время появится.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.