Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Возник вопрос, каким образом можно динамически подогнать размер объекта Text(Надпись),что бы в него полностью вмещался текст, т.е. если изменится длина текста, то увеличивалась ширина, а если размер шрифта, то высота объекта? В каждом человеке солнце. Только дайте ему светить.(с)Сократ
mishem, я только пробовал изменять размер при определенном шрифте, и присваивать высоту в зависимости от шрифта.. Но на счет ширины, ибо текст может измениться - понятия не имею
В каждом человеке солнце. Только дайте ему светить.(с)Сократ
Сообщение отредактировано MicroCip - Пт, 06 Января 2012, 21:18
нужно посчитать количество символов, и умножить на ширину символа. Если несколько строк, считаем количество строк. Ну и т.д. Другой вопрос как узнать ширину символа... Не хочешь читать хелп?
да никак, это от самого шрифта и его размера зависит. Tahoma одной ширины, а Courier раза в 1,5 шире все буквы. вот для одного шрифта можно приблизительно рассчитать исходя из размера Как задавать вопросы
Ну от чего же? Шрифт испоьзуемый в проекте мы знаем. Составить список используемых размеров и будешь знать какая ширина шрифта, если его высота такая то. Теперь новый вопрос, а оно это надо? Я как то пытался высчитать высоту листбокса, так точо и не сделал, только приблизительно. Бросил. Не хочешь читать хелп?
можно примерно взять ширину символа Ариала (+ расстояние между буквами) и умножать ее на кол-во символов, получится примерно общая ширина текста. для этого напиши примерно любой текст, измерь его ширину в пикселях и раздели на кол-во символов, получишь примерную часть ширины приходящейся на один символ. Как задавать вопросы
mishem, дык это не проблема, мне до пикселя точность не нужна. Ну максимальная погрешность 8-10 пикселей DEMBEL, сейчас попробую В каждом человеке солнце. Только дайте ему светить.(с)Сократ
нужно посчитать количество символов, и умножить на ширину символа.
Добавлено (07 Января 2016, 01:36) --------------------------------------------- Вернулся к этому вопросу. Лучше поздно чем никогда. Где то мы уже решали этот вопрос с помощью чекбокса.
Создаем где нибудь за пределами окна объект чекбокс. В нашем случае его имя будет CheckBox1. Создаем объект Надпись\Текст. В нашем случае его имя будет Text1.
В первую очередь нам нужно узнать размер, стиль и название шрифта объекта Text1.
Так как мы изменили параметры шрифта, то и высота объекта CheckBox1 так же изменилась. Изменяем высоту объекта Text1 в соответствии с объектом CheckBox1.
Весь этот код мы помещаем к примеру в свойства страницы, или в свойства проекта на вкладку Запуск, или если планируется менять параметры шрифта во время работы программы, то туда где мы будем менять параметры шрифта. Если шрифт менять не планируется, то этот код можно не выполнять, а сразу установить параметры шрифта объекта CheckBox1 такие же как и у объекта Text1.
Дальнейший код выполняется в зависимости от того как будет вводится текст в объект Text1.
Предположим что в объекте Text1 будет переменная [Text] которой мы будем присваивать нужный нам текст. Соответственно в объекте CheckBox1 в поле "Заголовок" должна так же быть эта переменная.
Для наглядности создайте объект "Поле ввода текста". Задайте переменную (содержимого) тоже [Text] . Перейдите в раздел "Команды" и на вкладке "Text Change" введите следующий код
Теперь по мере ввода текста объект Text1 будет изменять свои размеры в соответствии с размером текста.
Но что делать если нам нужно чтобы объект Text1 не превышал определенных размеров? Например нам нужно чтобы максимальная длина объекта была 300 пикселей, а длина текста может превышать этот размер.
где в переменной [StrLenDefault] будет содержаться длина текста. Количество символов. Строк же может получится не только две, а три и более. Для этого нам нужно определить количество символов которое умещается в объекте размером в 300 пискселей.
Когда размер объекта превысит 300 пикселей эта переменная будет содержать то количество символов которое может уместится в объекте такого размера. Теперь нам нужно изменить его высоту в соответствии с количеством строк.
Высота объекта CheckBox1 нам известна. Она находится в переменной [CheckBox1Height]. Эта высота соответствует одной строке.
Добавим условие которое будет выполняться когда длина объекта превышает допустимый размер.
В переменную [StrLen] мы получаем текущую длину текста. Математическим вычислением Trunc([StrLen]/[StrLenDefault]) мы получаем целое значение с округлением в меньшую сторону. То есть 1,9 =1; 1,2=1 и т.д.
Так как мы получаем округление в меньшую сторону, то к полученному результату прибавляем еще одну строку и умножаем на высоту объекта CheckBox1.
Это я описал один из возможных результатов если текст не имеет переноса строки. Так как объект CheckBox поддерживает перенос строки, то это не самый лучший вариант вычисления высоты. Но для общего развития тоже сгодится. :)
На мой взгляд, лучше сначала высчитать количество допустимых символов символов в объекте CheckBox, а после вставлять перенос строки после допустимого количества символов и получать высоту объекта CheckBox.
Если пойти простым способом, то в основном в строке может присутствовать пара заглавных букв и пара широких символов такие как ш,щ,ю...
Для этого составляем какую нибудь строку типа ФШфш При запуске проекта выполняем что то типа
Первые две строчки кода удаляют возможные в тексте переносы строк. Они могут быть как [#13][#10], так и только [#13]. Заменяем их на пробелы.
Ну а далее думаю понятно, получаем длину всего текста, делим на количество символов по умолчанию, прибавляем еще одну строку, и вставляем переносы строк в наш текст. Получаем размеры чекбокса и присваиваем нашему объекту Text1.
Если нужен более качественный результат, можно пойти более сложным способом, оставить переносы, определить все широкие символы и т.д. Этот вариант я расписывать не буду. :)
Сами дерзайте. Одно могу сказать, для облегчения сложного варианта я бы воспользовался плагином hpwControl.
Все это писалось на лету с наскоку, просто появилось желание покопаться немного в этой теме. Так что возможно есть и другие решения или варианты. Про перенос строки сам узнал только в процессе когда все это писал. Ранее даже не задумывался на эту тему.
Добавлено (07 Января 2016, 01:47) --------------------------------------------- Кстати точно так же с помощью объекта CheckBox можно изменять высоту объекта ListBox. Только для того чтобы не прибавлялась лишняя высота в объекте ListBox, нужно из высоты объекта CheckBox вычесть два пикселя и умножить на количество строк.
Прикольно! Ни разу не требовалось, но для общего развития - интересно!
Кстати, если разнородное форматирование в объекте Text не требуется, то можно просто вместо него использовать CheckBox (или RadioButton), прикрыв чем-нибудь "гнездо для отметки", чтобы пользователю не было видно, что это не текстовой объект. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Сообщение отредактировано Вадим - Чт, 07 Января 2016, 22:26