Консультация № 16811
09.02.2005, 15:30
0.00 руб.
0 3 3

Уважаемые эксперты! Если, например, в TextBox будет вводиться не более
20 символов и надо подогнать размер TextBox так, чтобы все они были ви
дны и чтобы не сильно расходовать место на форме, как лучше определить
размер TextBox? Неужели надо брать самую широкую букву "ф" и 20 раз её
проклацать, а потом подогнать размер бокса? А если потом надо 30 симво
лов - считать сколько единиц занимает "ф" для каждого размера определённого шрифта? В каких единицах измеряются размеры объектов в Visual Basic и почему не в пикселях?

Обсуждение

Неизвестный
09.02.2005, 21:32
общий
это ответ
Здравствуйте, Александр А.А.!
Начну с главного - есть три пути решения Вашей задачи про подгон текстбокса.


<u>Решение 1</u>
1. Натягиваем на форму лейбл.
2. Делаем его невидимым
3. Делаем ему Автосайз=Труе
4. Применяем ему те же параметры шрифта (имя, размер), что и у текстбокса.
5. Label1.Caption=Text1.text
6. Text1.Width=Label1.Width
Далее идет некоторая неувязка - размер текстбокса будет на 1 символ меньше, чем нужно.. обходить этот "глюк" можно с помощью принудительного добавления к.-л. символа к строке, передающейся лейблу (например, Label1.Caption=Text1.text & "1").
Примечание: насколько я понял, заранее вводимый текст не известен, соответственно, размер текстбокса заранее нельзя задать. Видимо, обработчик следует сделать после ввода юзером нужного текста (скажем, по клавише Enter) или в событие Text1_Change().


<u>Решение 2</u>
<i>
Private Sub Text1_Change()
Text1.Width = Me.TextWidth(Text1)
End Sub
</i>
Без комментариев, но с тем же вышеперечесленным "глюком".


<u>Решение 3</u> Состоит в использовании вызовов API и я его не рассматриваю ввиду бессмысленности:)
Что касается второго вопроса: по-умолчанию, ВБ ставит единицу измерения - твипы. Справка:
<i>
Твип (twip) — это независимая от экрана единица измерения, используемая для обеспечения того, чтобы местонахождение и пропорции элементов экрана в приложении всегда были одинаковы на всех типах дисплеев. Твип — единица измерения экрана, равная 1/20 точки принтера. В 1 логическом сантиметре содержится приблизительно 567 твипов, а в 1 логическом дюйме — 1440 твипов. Логический сантиметр (дюйм) — это длина элемента экрана, равная 1 сантиметру (дюйму) при печати.
</i>
Изменить единицу измерения можно путем манипулирования параметром ScaleMode формы.
Неизвестный
10.02.2005, 09:11
общий
это ответ
Здравствуйте, Александр А.А.!
1. Для этого случая есть функция TextWidth...
2. У формы, на которой находиться бокс, есть свойство ScaleMode, ему можно присвоить значение 3-Pixel...
Неизвестный
10.02.2005, 10:59
общий
это ответ
Здравствуйте, Александр А.А.!
Нет не надо клацать 20 раз. Можно просто измерить ширину 1-й буквы и помножить на их количество. Как тебе? ;)
Форма ответа