Как определить необходимую высоту контрола, исходя из размера шрифта в нём?
Имеется некий контрол, например, текстбокс. Необходимо определить, какую высоту для него задать, исходя из размера шрифта текста в нём.
Я раньше решал подобную задачу для метки (Label), но алгоритм получился очень сложным, его приходилось оттачивать методом перебора коэфициентов, и всё равно на очень мелких и крупных шрифтах для TimesNewRoman размеры определялись не совсем кррректно.
Кто-нибудь может подкинуть примерный алгоритм решения?
Если нужно использование API, можете скинуть ссылки на API - функции, и примерное их описание?
Заранее всем огромное спасибо.
Цитата:
Originally posted by mhaturov
Есть следующая задача:
Имеется некий контрол, например, текстбокс. Необходимо определить, какую высоту для него задать, исходя из размера шрифта текста в нём.
Я раньше решал подобную задачу для метки (Label), но алгоритм получился очень сложным, его приходилось оттачивать методом перебора коэфициентов, и всё равно на очень мелких и крупных шрифтах для TimesNewRoman размеры определялись не совсем кррректно.
Кто-нибудь может подкинуть примерный алгоритм решения?
Если нужно использование API, можете скинуть ссылки на API - функции, и примерное их описание?
Заранее всем огромное спасибо.
Есть следующая задача:
Имеется некий контрол, например, текстбокс. Необходимо определить, какую высоту для него задать, исходя из размера шрифта текста в нём.
Я раньше решал подобную задачу для метки (Label), но алгоритм получился очень сложным, его приходилось оттачивать методом перебора коэфициентов, и всё равно на очень мелких и крупных шрифтах для TimesNewRoman размеры определялись не совсем кррректно.
Кто-нибудь может подкинуть примерный алгоритм решения?
Если нужно использование API, можете скинуть ссылки на API - функции, и примерное их описание?
Заранее всем огромное спасибо.
Сейчас я пользуюсь тем, что данный алгоритм мне необходим для реализации совего контрола, в состав которого входит, помимо текстбокса, комбобокс. Причём, если отображается текстбокс, то комбобокс не отображается.
Как известно, комбобокс сам размечается по высоте в зависимости от шрифта. Поэтому сейчас я пишу в комбобокс 1 значение, и по его высоте определяю необходимую высоту текстбокса.
Но ведь этот метод решения задачи верен для одного моего, крайне специфического, случая. Хочется, однако, иметь простой и надёжный алгоритм на все случаи жизни...
Зная сам текст и 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
посмотри там внутри модуля. Комментарии я расставил достаточно подробные.