powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Автоматическая высота чекбокса
25 сообщений из 25, страница 1 из 1
VB6: Автоматическая высота чекбокса
    #37783921
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попытался погуглить, что либо не смог хорошо сформулировать, либо никто не заморачивался.

В общем, есть чекбокс, заранее неизвестно, какой Caption ему будет даден, если Caption будет длиннее ширины, он начнет переносится по словам, если высоты ему не хватит, то обрезается сверху и снизу.
Хочется автоматически адаптировать высоту чекбокса к тексту Caption

Пока варианты решения:
Взять скрытую метку с AutoSize и WordWrap, заполнить тем же текстом и посмотреть, какая у нее будет высота. Проблема в том, что метка и чекбокс по-разному работают с очень длинным словом, которое одно не влазит по ширине.

Написать алгоритм расчета через Form.TextWidth - длинный и муторный.

Обернуть чекбокс в юзерконтрол и использовать метку в качестве подписи к чекбоксу.

Есть простые идеи?

зачемПредвосхищая вопрос, а нафиг это нужно и может сделать по-другому, объясню: я динамически гружу на форму набор фильтров друг под другом, соответственно, текст чекбокса заранее неизвестен, а высоту надо знать, чтобы грузить следующие фильтры ниже.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783940
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понятно что нужно
может есть рисунок
если нужно именно квадратик чекбоска сделать большим по размеру чем есть
то наверное не получится у него размер фиксирован как мне кажется
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783948
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, квадратик менять не надо. Просто положи чекбокс на форму и попытайся написать ему длинный Caption - поймешь о чем речь
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783951
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а может надо прямоугольник для label определить зная его текст
тогда win api вызов надо сделать
те считать фонт из метки размер курсивность и прочее
ширину метки
вызвать функцию определения прямоугольника
только результат может несколько не совпадать
из-за того что у фонта слишком много характеристик
но пара пикселов отличие я думаю не существенно
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783955
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, для Label все просто - у нее есть авторазмер. Но Label и Checkbox - не одно и то же
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783964
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я имею ввиду
что если знаем ширину прямоугольника и текст в нем и фонт в нем
то можем определить его высоту вызвав api функцию

может я чего-то не учитываю
но ведь рядом с чекбоксом текст который занимает вполне определенный прямоугольник
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783970
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почти.
В общем-то я не знаю ширину прямоугольника точно, так как слева от него квадратик.
А еще неизвестно, как поведет себя апи-функция (открой тайну какая) как раз таки с длинными словами.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783973
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос123,

я тож так думаю. Shocker.Pro, а длина чекбокса фиксированная? тогда для начала обработать текст, заменяя пробелы между словами, которые не укладываются в длину чекбокса, на перенос строки, а затем высчитать высоту значения caption. можно обойтись и без api, зная высоту шрифта и междустрочный интервал между строками.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783976
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
высчитать высоту значения caption высоту чекбокса
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37783990
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот в том то и дело что api функция и функция рисования это разные функции
поэтому точного совпадения не получиться но можно добиться близкого совпадения
просто надо тестить смотреть поведение чекбоксовой функции и подгонять свою под нее

я именно так и делал когда надо было что-то подобное сделать
с точностью до пиксела у меня не получилсь сделать но это и не важно

но не думаю что это стоит того
ведь как я понял отдельный дополнительный label вместо подписи с чекбоксу устроит

имя функции сам не помню может DrawText
но найти можно походив по хелпу
вообщем функция которая рисует в заданном прямоугольнике
она же может его предварительно вычислить
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784002
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтот не пойму, а что мешает использовать чекбокс без подписи, а подпись помещать в label, с которым
Shocker.Proвсе просто - у нее есть авторазмер
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784027
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shosker,
я думаю это стандартная фича, просто через VB не все доделано.
Думаю копать надо в сторону (ну если хочешь по нормальному а не извращескими кодами)
BCM_GETIDEALSIZE message

Далее делаешь упорный поиск по google со словами VB6, checkbox, BCM_GETIDEALSIZE
В лучшем случае найдешь готовый кусок кода, чтоб не быть первопроходцем,
в не самом плохом случае найдешь кусок кода не на VB.
Ну я бы так подходил к решению.

Некую подобную задачу недавно решал.
MaxLength для текста в combobox
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784037
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenHimЧтот не пойму, а что мешает использовать чекбокс без подписи, а подпись помещать в label, с которым
Shocker.Proвсе просто - у нее есть авторазмерну это один из вариантов, я думал, может есть что проще. К тому же мне не нравится, что Label режет слишком длинные слова в этом случае, конечно, это не самое страшное....

Дмитрий77, спасибо гляну
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784088
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вспомнил как делал

я брал строку и в ней для каждой буквы отдельно определял ширину
это с использованием TextOut или подобной функции

зная все маленькие прямоугольники окружающие каждую букву
можно их скомбинировать как надо
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784090
вопрос123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно их скомбинировать как надо
ну и переносы сделать как надо
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784100
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы слишком длинные тексты делал всплывающими подсказками — стандартный подход в проектировании интерфейсов — и не морочился с высотой.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784201
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шокер, а зачем извращаться с CheckBox-ами?
Сделай ListBox с MultiSelect ...
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784226
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

интересная мысль, обдумаю

AndreTM,

некрасиво, ненаглядно. А еще фильтр может быть запрещен - каждый отдельно.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784290
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proнекрасиво, ненаглядно. А еще фильтр может быть запрещен - каждый отдельно.Тогда грид. С чекбоксами вкл/выкл. А то ведь следующая мысль будет - комбинация фильтров с помощью булевых операторов
Просто, использование независимых элементов интерфейса (или, пусть, мультигруппы) для управления однотипными свойствами одной сущности - это немного нонсенс...
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784312
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMТогда грид. С чекбоксами вкл/выклА, ты не понял. Не все фильтры есть чекбоксы. То есть могут грузится датабоксы, выпадающие списки, текстбоксы и пр. мишура, причем в произвольной последовательности.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784403
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro , то есть, вплоть до "список в списке"? Тогда причём здесь чекбоксы? - делай сразу таблицы БД и select

Или я еще чего-то не понимаю?
Расскажи уж тогда сообществу, что и как отбирается...
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784428
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMвплоть до "список в списке"?нет, без плоти. )
не понял про таблицы и БД.

В общем это движок пользовательских отчетов. Отчет отображается в сетке. На стороне клиента код прописан один раз и не меняется, все настройки делаются администратором отчетов и хранятся в БД. Каждый отчет может фильтроваться разнообразными наборами фильтров, наборы задаются администратором и хранятся в БД. Сложных контролов там нет, то есть это дата, интервал дат, выпадающие списки, текст, чекбокс и т.п. Соответственно, пользователь выбирает отчет, ему загружается набор фильтров, он их настраивает и видит в сетке нужные данные.
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784449
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПопытался погуглить, что либо не смог хорошо сформулировать, либо никто не заморачивался.

В общем, есть чекбокс, заранее неизвестно, какой Caption ему будет даден, если Caption будет длиннее ширины, он начнет переносится по словам, если высоты ему не хватит, то обрезается сверху и снизу.
Хочется автоматически адаптировать высоту чекбокса к тексту Caption

Пока варианты решения:
Взять скрытую метку с AutoSize и WordWrap, заполнить тем же текстом и посмотреть, какая у нее будет высота. Проблема в том, что метка и чекбокс по-разному работают с очень длинным словом, которое одно не влазит по ширине.

Написать алгоритм расчета через Form.TextWidth - длинный и муторный.

Обернуть чекбокс в юзерконтрол и использовать метку в качестве подписи к чекбоксу.

Есть простые идеи?

+
зачемПредвосхищая вопрос, а нафиг это нужно и может сделать по-другому, объясню: я динамически гружу на форму набор фильтров друг под другом, соответственно, текст чекбокса заранее неизвестен, а высоту надо знать, чтобы грузить следующие фильтры ниже.



Как то столкнулся с подобной проблемой
Пошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло,
так как label менял помимо высоты ещё и ширину
Тогда взял флексгрит от componentone (возможно получится со стандартным от MS)
добавил туда 1строку 1 колонку выставил настройки текста в строке, выставил ширину столбца
и ограничил максимальную высоту строки (есть там такое свойство RowHeightMax).
Затем грузил туда текст, применял AutoSize и полученную высоту строки флекса подставлял в контрол.
Если контрол чекбокс то здесь немного сложнее, длинный текст нужно обрезать, возможно,
нужно вводить ограничение по Len текста или использовать для подписи чекбокса теже label
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784459
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBkaПошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло,
так как label менял помимо высоты ещё и ширинуты просто забыл про WordWrap, если его включить, ширина Label не меняется, а меняется высота )
...
Рейтинг: 0 / 0
VB6: Автоматическая высота чекбокса
    #37784461
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProTpaBkaПошел по пути наименьшего сопротивления, грузил текст в caption label–ничего путного из этого не вышло,
так как label менял помимо высоты ещё и ширинуты просто забыл про WordWrap, если его включить, ширина Label не меняется, а меняется высота )
Я уже не помню для чего мне это было надо, но с label точно не получалось
А флексом получилось
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Автоматическая высота чекбокса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]