Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU
(Тестовый режим)

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 10
от 15.02.2005, 04:50

Администратор:Калашников О.А. (adm@rusfaq.ru)
В номере:Вопросов: 2, Ответов: 5


Вопрос № 16811

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

Отвечает: Licvidator
Здравствуйте, Александр А.А.!
Начну с главного - есть три пути решения Вашей задачи про подгон текстбокса.


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


Решение 2

Private Sub Text1_Change()
Text1.Width = Me.TextWidth(Text1)
End Sub

Без комментариев, но с тем же вышеперечесленным "глюком".


Решение 3 Состоит в использовании вызовов API и я его не рассматриваю ввиду бессмысленности:)
Что касается второго вопроса: по-умолчанию, ВБ ставит единицу измерения - твипы. Справка:

Твип (twip) — это независимая от экрана единица измерения, используемая для обеспечения того, чтобы местонахождение и пропорции элементов экрана в приложении всегда были одинаковы на всех типах дисплеев. Твип — единица измерения экрана, равная 1/20 точки принтера. В 1 логическом сантиметре содержится приблизительно 567 твипов, а в 1 логическом дюйме — 1440 твипов. Логический сантиметр (дюйм) — это длина элемента экрана, равная 1 сантиметру (дюйму) при печати.

Изменить единицу измерения можно путем манипулирования параметром ScaleMode формы.
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 09.02.2005, 21:32

Отвечает: DSota
Здравствуйте, Александр А.А.!
1. Для этого случая есть функция TextWidth...
2. У формы, на которой находиться бокс, есть свойство ScaleMode, ему можно присвоить значение 3-Pixel...
Ответ отправил: DSota (статус: Студент)
Отправлен: 10.02.2005, 09:11

Отвечает: Гордеев Сергей Николаевич
Здравствуйте, Александр А.А.!
Нет не надо клацать 20 раз. Можно просто измерить ширину 1-й буквы и помножить на их количество. Как тебе? ;)
Ответ отправил: Гордеев Сергей Николаевич (статус: Студент)
Отправлен: 10.02.2005, 10:59


Вопрос № 16835
Уважаемые эксперты! Как сразу перирисовать TextBox, если в нём меняется
цвет букв (ForeColor) при обработке нажатий клавиш в Private Sub Text1
_KeyPress(KeyAscii As Integer), если нажата не та клавиша?
Отправлен: 10.02.2005, 00:04
Вопрос задал: Александр А.А. (статус: Читатель)
Всего ответов отправлено: 2

Отвечает: Гордеев Сергей Николаевич
Здравствуйте, Александр А.А.!
У любого объекта есть такое св-во как Refresh, если я тебя правильно понял то оно тебе поможет.
Ответ отправил: Гордеев Сергей Николаевич (статус: Студент)
Отправлен: 10.02.2005, 11:11

Отвечает: Licvidator
Здравствуйте, Александр А.А.!
В каком смысле перерисовать? Вам нужно, чтобы при вводе не того символа менялся цвет букв? Ну тогда нет проблемы, пишем что-то вроде этого:

If KeyAscii = 13 Then KeyAscii = 0: Text1.ForeColor = vbRed Else Text1.ForeColor = vbGreen

Если же Вам надо, чтобы каждая отдельная буква имела свой цвет, то TextBox это не поддерживает, надо использовать RichTextBox.
Удачи!
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 10.02.2005, 17:25


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.

>>" class=button>
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Россия, Москва. Идея, дизайн, программирование: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Отписаться

В избранное