Страницы: 1 2 След.
RSS
VBA - размер строки
 
В TextBox введено значение "Фпав458wWmhjt".  
Как вычислить длинну этого "Фпав458wWmhjt" с учетом типа, размера и написания шрифта, чтобы сравнить с размером TextBox?  
Пробовал через AutoSise, но получается не то, что задумал.
 
Скопировать в ячейку пустого столбца, потом столбец.AutoFit и взять столбец.Width
 
Может быть, может!  
Но, на первый взгляд, это годится для одного TextBox, а их не один десяток.  
Для одного и AutoSise работает прекрасно.
 
Ну а если задать текстбоксу моноширинный шрифт?  
Или надо знать, сколько займёт места не в текстбоксе?
 
А даже если и моноширинный, ну, например, Courier...  
Всё равно не пойму как перевести размер шрифта в пунктах в ширину и высоту строки текста в пикселах? (или в сём там у текстбокса меряется? до сих пор не знаю...)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
для моноширинного шрифта    
 
шс=размер*кол_симв*0,114  
 
достаточно точно
 
Как говорил один известный герой "В моем доме попрошу не выражаться!".  
 
Задача стоит так:  
В текстбоксе выбран шрифт (arial, colibri, tahoma) с размером 8, 10, 12.  
В случае, если введенный текст больше размера текстбокс, то последний надо увеличить до размера текста, а если меньше - ширину не менять.  
С AutoSise все хорошо, но ширина текстбоксов после заполнения разная, а я хочу сделать одинаковую.  
До какого-то предела и с AutoSise можно обеспечить требуемое, но слишком много Select & If.  
 
А про моноширинный шрифт можно поподробнее, или ссылочку?
 
для моно    
 
вс=размер*1,3
 
HELP EXCEL=================================  
Ширина столбца на листе может иметь любое значение от 0 до 255. Это значение соответствует числу знаков, которые могут быть отображены в ячейке, отформатированной с использованием стандартного шрифта (Стандартный шрифт. Стандартный шрифт для текста на листе. Этот шрифт установлен по умолчанию для обычного стиля ячеек.). Ширина столбца по умолчанию составляет 8,43 знака. Если ширина столбца равна 0, столбец будет скрыт.    
 
Высоту строки можно задать в пределах от 0 до 409. Это значение соответствует высоте строки в пунктах (1 пункт соответствует приблизительно 1/72 дюйма). Высота строки по умолчанию составляет 12,75 пункта. Если высота строки равна 0, строка будет скрыта.
 
Уточняю  
Начальная ширина всех текстбоксов 90, но если хоть один шире - все должны иметь ширину самого широкого.
 
{quote}{login=RAN}{date=15.10.2010 10:28}{thema=}{post}  
С AutoSise все хорошо, но ширина текстбоксов после заполнения разная, а я хочу сделать одинаковую.  
{/post}{/quote} А что мешает вычислить длину самой длинной строки и присвоить ее всем текстбоксам?  
 
51519
Я сам - дурнее всякого примера! ...
 
И еще уточняю  
Это не для листа EXCEL, а для формы.
 
RAN,  
у моноширинных шрифтов (например, Courier) ширина каждого символа одинаковая, а  
у, например, Arial, I по ширине много уже, чем W    
 
GM51,  
шс=размер*кол_симв*0,114 , вс=размер*1,3 - это для любых моноширинников?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
KuklP  
Мешает то, что не знаю как.  
При этом желательно, чтобы изменение происходило сразу после изменения ширины самого большого.
 
Про моноширинный много не скажу, но например вот это:  
wewew  
wwwww  
iiiii  
wiwiw  
написанное шрифтом Terminal (и кстати в посте тоже), имеет одну ширину.
 
Серёга, а как ты, интересно, для Ариала вычислишь длину самой длинной строки?  
Он же не моноширинный...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Hugo}{date=15.10.2010 10:44}{thema=}{post}Про моноширинный много не скажу, но например вот это:  
wewew  
wwwww  
iiiii  
wiwiw  
написанное шрифтом Terminal (и кстати в посте тоже), имеет одну ширину.{/post}{/quote}  
У кого-то из нас плохо со зрением, наверное...  
Таки-да! Пока вводишь ответ - моноширинный шрифт и ширина  
111  
ШШШ  
одинаковая.  
Но когда видишь его уже в посте, то "две большие разницы"
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Хотел написать "в окне редактирования/написания поста", но поленился...  
Таки вынудили :)
 
В шрифте Colibre 11 10 шт. W =100, а 10 шт. I ~ 55-60.  
Опробовал...
 
А теперь посчитайте Terminal, Courier или Lucida какая-то...
 
{quote}{login=Alex_ST}{date=15.10.2010 10:44}{thema=}{post}Серёга, а как ты, интересно, для Ариала вычислишь длину самой длинной строки?  
Он же не моноширинный...{/post}{/quote} Я имел в виду моноширинный. А для других метод Казанского катит. Так будет всего одно вычисление и потом циклом по текстбоксам присваивать размер.
Я сам - дурнее всякого примера! ...
 
Еше вариант - автосайз, сравнивать текст только с первым боксоми если он длинней, присваивать всем боксам такой размер.
Я сам - дурнее всякого примера! ...
 
А сколько там текстбоксов?  
Не сотня же?  
Тогда можно попробовать сделать на форме невидимый текстбокс, а потом в цикле вставлять в него по очереди все значения, делать автосайз и таким образом найти максимальную ширину.  
А потом всем текстбоксам сделать такую же.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Alex_ST  
Как раз это - моя последняя идея.  
Обдумываю, но еще не пробовал.
 
{quote}{login=Alex_ST}{date=15.10.2010 11:13}{thema=}{post}А сколько там текстбоксов?  
Не сотня же?  
Тогда можно попробовать сделать на форме невидимый текстбокс, а потом в цикле вставлять в него по очереди все значения, делать автосайз и таким образом найти максимальную ширину.  
А потом всем текстбоксам сделать такую же.{/post}{/quote} Алексей, уменя то же, но без невидимого текстбокса.
Я сам - дурнее всякого примера! ...
 
KuklP  
 
А если длинней 5 бокс? Или 25?  
А если выравнивать после заполнения всех, то зачем это вообще надо? Форма то закроется.  
Вся проблема в том, чтобы все поля сразу принимали ширину максимального.  
При этом следует учесть, что поля расположены в 2 столбца, и ширина полей в каждом столбце должна быть равна максимальной именно в этом столбце, либо быть равной принятой по умолчанию (если все меньше).  
В данном случае рассматриваем 40 текстбоксов.
 
{quote}{login=RAN}{date=15.10.2010 11:37}{thema=}{post}KuklP  
В данном случае рассматриваем 40 текстбоксов.{/post}{/quote}Заносите все данные в массив, потом весь массив в столбец тестбокса, автоформатом определяете ширину столбца и назначаете своим текстбоксам. По времени на все - менее 1 тысячной сек. и 3-4 строчки кода.
 
А можно эти 3-4 строчки кода?  
При этом надо учесть, что обработка идет в модуле класса  
 
Public WithEvents oTxtBx As MSForms.TextBox    
 
и в разных местах модуля может быть так  
frmDinForm.Controls("TextBox" &         myNmb           ).Width = txtWidth  
а может и так  
frmDinForm.Controls("TextBox" &           i             ).Left = txtLeft21 + 10
 
{quote}{login=RAN}{date=15.10.2010 11:37}{thema=}{post}KuklP  
 
А если длинней 5 бокс? Или 25?  
А если выравнивать после заполнения всех, то зачем это вообще надо? Форма то закроется.  
Вся проблема в том, чтобы все поля сразу принимали ширину максимального.  
При этом следует учесть, что поля расположены в 2 столбца, и ширина полей в каждом столбце должна быть равна максимальной именно в этом столбце, либо быть равной принятой по умолчанию (если все меньше).  
В данном случае рассматриваем 40 текстбоксов.{/post}{/quote} А подумать? Да хоть триста. Уже после первого заполнения все боксы имеют одинаковую ширину. Заполняем 5й(25й), сравниваем с первым. Если 1й меньше - всем столбцам присваивается большая ширина. Зачем сравнивать со всеми, если все одинаковы?
Я сам - дурнее всякого примера! ...
 
Серёга,  
с увеличением это прокатит, а вот как на счёт уменьшения ширины?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1 2 След.
Читают тему
Наверх