Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить необходимую высоту контрола, исходя из размера шрифта в нём?

266
26 февраля 2004 года
mhaturov
901 / / 23.10.2003
Есть следующая задача:
Имеется некий контрол, например, текстбокс. Необходимо определить, какую высоту для него задать, исходя из размера шрифта текста в нём.
Я раньше решал подобную задачу для метки (Label), но алгоритм получился очень сложным, его приходилось оттачивать методом перебора коэфициентов, и всё равно на очень мелких и крупных шрифтах для TimesNewRoman размеры определялись не совсем кррректно.
Кто-нибудь может подкинуть примерный алгоритм решения?
Если нужно использование API, можете скинуть ссылки на API - функции, и примерное их описание?
Заранее всем огромное спасибо.
266
26 февраля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by mhaturov
Есть следующая задача:
Имеется некий контрол, например, текстбокс. Необходимо определить, какую высоту для него задать, исходя из размера шрифта текста в нём.
Я раньше решал подобную задачу для метки (Label), но алгоритм получился очень сложным, его приходилось оттачивать методом перебора коэфициентов, и всё равно на очень мелких и крупных шрифтах для TimesNewRoman размеры определялись не совсем кррректно.
Кто-нибудь может подкинуть примерный алгоритм решения?
Если нужно использование API, можете скинуть ссылки на API - функции, и примерное их описание?
Заранее всем огромное спасибо.


Сейчас я пользуюсь тем, что данный алгоритм мне необходим для реализации совего контрола, в состав которого входит, помимо текстбокса, комбобокс. Причём, если отображается текстбокс, то комбобокс не отображается.
Как известно, комбобокс сам размечается по высоте в зависимости от шрифта. Поэтому сейчас я пишу в комбобокс 1 значение, и по его высоте определяю необходимую высоту текстбокса.
Но ведь этот метод решения задачи верен для одного моего, крайне специфического, случая. Хочется, однако, иметь простой и надёжный алгоритм на все случаи жизни...

258
26 февраля 2004 года
SergeySV
1.5K / / 19.03.2003
Да, есть такой алгоритм.
Зная сам текст и hdc можно вычислить итоговую длину и ширину с помощью одной простой API функции(GetTextExtentPoint32). Сложности - надо получить сначала hWnd TextBox, из него уже hdc и тогда все Ok. Получение hWnd TextBox в VBA достаточно геммройная задача, там еще может быть такой прикол как в Access, что контролы рисованные и не являются окнами, и токо когда фокус приходит на них, они становятся окнами и получают hWnd. Вообщем получается что надо переводить фокус .... не очень красивое решение для VBA

Также можно делать и подругому, зная имя шрифта и его размер самому создать шрифт, выбрать его в hdc постоянного окна (например Desktop) и уже опять используя GetTextExtentPoint32 задать текстовую строку и получить размеры.

Вообщем я уже написал такую функцию - GetTextPoint и выложил у нас в Исходниках: http://sources.codenet.ru/download.php?id=370&cid=25&o=0&my=0

посмотри там внутри модуля. Комментарии я расставил достаточно подробные.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог