|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Попытался погуглить, что либо не смог хорошо сформулировать, либо никто не заморачивался. В общем, есть чекбокс, заранее неизвестно, какой Caption ему будет даден, если Caption будет длиннее ширины, он начнет переносится по словам, если высоты ему не хватит, то обрезается сверху и снизу. Хочется автоматически адаптировать высоту чекбокса к тексту Caption Пока варианты решения: Взять скрытую метку с AutoSize и WordWrap, заполнить тем же текстом и посмотреть, какая у нее будет высота. Проблема в том, что метка и чекбокс по-разному работают с очень длинным словом, которое одно не влазит по ширине. Написать алгоритм расчета через Form.TextWidth - длинный и муторный. Обернуть чекбокс в юзерконтрол и использовать метку в качестве подписи к чекбоксу. Есть простые идеи? зачемПредвосхищая вопрос, а нафиг это нужно и может сделать по-другому, объясню: я динамически гружу на форму набор фильтров друг под другом, соответственно, текст чекбокса заранее неизвестен, а высоту надо знать, чтобы грузить следующие фильтры ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:34 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
не понятно что нужно может есть рисунок если нужно именно квадратик чекбоска сделать большим по размеру чем есть то наверное не получится у него размер фиксирован как мне кажется ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:43 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
не, квадратик менять не надо. Просто положи чекбокс на форму и попытайся написать ему длинный Caption - поймешь о чем речь ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:49 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
а может надо прямоугольник для label определить зная его текст тогда win api вызов надо сделать те считать фонт из метки размер курсивность и прочее ширину метки вызвать функцию определения прямоугольника только результат может несколько не совпадать из-за того что у фонта слишком много характеристик но пара пикселов отличие я думаю не существенно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:50 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Блин, для Label все просто - у нее есть авторазмер. Но Label и Checkbox - не одно и то же ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:52 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
я имею ввиду что если знаем ширину прямоугольника и текст в нем и фонт в нем то можем определить его высоту вызвав api функцию может я чего-то не учитываю но ведь рядом с чекбоксом текст который занимает вполне определенный прямоугольник ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 16:56 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
почти. В общем-то я не знаю ширину прямоугольника точно, так как слева от него квадратик. А еще неизвестно, как поведет себя апи-функция (открой тайну какая) как раз таки с длинными словами. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:00 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
вопрос123, я тож так думаю. Shocker.Pro, а длина чекбокса фиксированная? тогда для начала обработать текст, заменяя пробелы между словами, которые не укладываются в длину чекбокса, на перенос строки, а затем высчитать высоту значения caption. можно обойтись и без api, зная высоту шрифта и междустрочный интервал между строками. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:00 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
высчитать высоту значения caption высоту чекбокса ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:02 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
вот в том то и дело что api функция и функция рисования это разные функции поэтому точного совпадения не получиться но можно добиться близкого совпадения просто надо тестить смотреть поведение чекбоксовой функции и подгонять свою под нее я именно так и делал когда надо было что-то подобное сделать с точностью до пиксела у меня не получилсь сделать но это и не важно но не думаю что это стоит того ведь как я понял отдельный дополнительный label вместо подписи с чекбоксу устроит имя функции сам не помню может DrawText но найти можно походив по хелпу вообщем функция которая рисует в заданном прямоугольнике она же может его предварительно вычислить ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:08 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Чтот не пойму, а что мешает использовать чекбокс без подписи, а подпись помещать в label, с которым Shocker.Proвсе просто - у нее есть авторазмер ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:14 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Shosker, я думаю это стандартная фича, просто через VB не все доделано. Думаю копать надо в сторону (ну если хочешь по нормальному а не извращескими кодами) BCM_GETIDEALSIZE message Далее делаешь упорный поиск по google со словами VB6, checkbox, BCM_GETIDEALSIZE В лучшем случае найдешь готовый кусок кода, чтоб не быть первопроходцем, в не самом плохом случае найдешь кусок кода не на VB. Ну я бы так подходил к решению. Некую подобную задачу недавно решал. MaxLength для текста в combobox ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:30 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
ElenHimЧтот не пойму, а что мешает использовать чекбокс без подписи, а подпись помещать в label, с которым Shocker.Proвсе просто - у нее есть авторазмерну это один из вариантов, я думал, может есть что проще. К тому же мне не нравится, что Label режет слишком длинные слова в этом случае, конечно, это не самое страшное.... Дмитрий77, спасибо гляну ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 17:34 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
вспомнил как делал я брал строку и в ней для каждой буквы отдельно определял ширину это с использованием TextOut или подобной функции зная все маленькие прямоугольники окружающие каждую букву можно их скомбинировать как надо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 18:09 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
можно их скомбинировать как надо ну и переносы сделать как надо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 18:10 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Я бы слишком длинные тексты делал всплывающими подсказками — стандартный подход в проектировании интерфейсов — и не морочился с высотой. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 18:17 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Шокер, а зачем извращаться с CheckBox-ами? Сделай ListBox с MultiSelect ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 20:27 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Antonariy, интересная мысль, обдумаю AndreTM, некрасиво, ненаглядно. А еще фильтр может быть запрещен - каждый отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 21:00 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Shocker.Proнекрасиво, ненаглядно. А еще фильтр может быть запрещен - каждый отдельно.Тогда грид. С чекбоксами вкл/выкл. А то ведь следующая мысль будет - комбинация фильтров с помощью булевых операторов Просто, использование независимых элементов интерфейса (или, пусть, мультигруппы) для управления однотипными свойствами одной сущности - это немного нонсенс... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 22:07 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
AndreTMТогда грид. С чекбоксами вкл/выклА, ты не понял. Не все фильтры есть чекбоксы. То есть могут грузится датабоксы, выпадающие списки, текстбоксы и пр. мишура, причем в произвольной последовательности. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2012, 23:08 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Shocker.Pro , то есть, вплоть до "список в списке"? Тогда причём здесь чекбоксы? - делай сразу таблицы БД и select Или я еще чего-то не понимаю? Расскажи уж тогда сообществу, что и как отбирается... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2012, 05:26 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
AndreTMвплоть до "список в списке"?нет, без плоти. ) не понял про таблицы и БД. В общем это движок пользовательских отчетов. Отчет отображается в сетке. На стороне клиента код прописан один раз и не меняется, все настройки делаются администратором отчетов и хранятся в БД. Каждый отчет может фильтроваться разнообразными наборами фильтров, наборы задаются администратором и хранятся в БД. Сложных контролов там нет, то есть это дата, интервал дат, выпадающие списки, текст, чекбокс и т.п. Соответственно, пользователь выбирает отчет, ему загружается набор фильтров, он их настраивает и видит в сетке нужные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2012, 10:02 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Shocker.ProПопытался погуглить, что либо не смог хорошо сформулировать, либо никто не заморачивался. В общем, есть чекбокс, заранее неизвестно, какой Caption ему будет даден, если Caption будет длиннее ширины, он начнет переносится по словам, если высоты ему не хватит, то обрезается сверху и снизу. Хочется автоматически адаптировать высоту чекбокса к тексту Caption Пока варианты решения: Взять скрытую метку с AutoSize и WordWrap, заполнить тем же текстом и посмотреть, какая у нее будет высота. Проблема в том, что метка и чекбокс по-разному работают с очень длинным словом, которое одно не влазит по ширине. Написать алгоритм расчета через Form.TextWidth - длинный и муторный. Обернуть чекбокс в юзерконтрол и использовать метку в качестве подписи к чекбоксу. Есть простые идеи? + зачемПредвосхищая вопрос, а нафиг это нужно и может сделать по-другому, объясню: я динамически гружу на форму набор фильтров друг под другом, соответственно, текст чекбокса заранее неизвестен, а высоту надо знать, чтобы грузить следующие фильтры ниже. Как то столкнулся с подобной проблемой Пошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло, так как label менял помимо высоты ещё и ширину Тогда взял флексгрит от componentone (возможно получится со стандартным от MS) добавил туда 1строку 1 колонку выставил настройки текста в строке, выставил ширину столбца и ограничил максимальную высоту строки (есть там такое свойство RowHeightMax). Затем грузил туда текст, применял AutoSize и полученную высоту строки флекса подставлял в контрол. Если контрол чекбокс то здесь немного сложнее, длинный текст нужно обрезать, возможно, нужно вводить ограничение по Len текста или использовать для подписи чекбокса теже label ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2012, 10:58 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
TpaBkaПошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло, так как label менял помимо высоты ещё и ширинуты просто забыл про WordWrap, если его включить, ширина Label не меняется, а меняется высота ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2012, 11:24 |
|
VB6: Автоматическая высота чекбокса
|
|||
---|---|---|---|
#18+
Shocker.ProTpaBkaПошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло, так как label менял помимо высоты ещё и ширинуты просто забыл про WordWrap, если его включить, ширина Label не меняется, а меняется высота ) Я уже не помню для чего мне это было надо, но с label точно не получалось А флексом получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2012, 11:27 |
|
|
start [/forum/topic.php?fid=60&fpage=79&tid=2157817]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 298ms |
total: | 447ms |
0 / 0 |