Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

Размеры TreeView на форме

17.02.2017, 11:28. Показов 2117. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, плиз, есть что то, что возвращает ширину и высоту итема в дереве? Нужно подстроить размеры TreeView под известное количество узлов плюс учитывать ширину и высоту их канвы. Высота, понятно одинаковая, размер иконки узла известен. Что то типа этого написал, работает, но есть наверное метод взятия ширины итема.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int MaxS=0;
int L1=0;
int hh=Canvas->TextHeight(ML[0].NameFull);
for(int i=0;i<TreeView1->Items->Count;i++)
{
    if(Canvas->TextWidth(ML[i].NameFull)>MaxS)
    MaxS=Canvas->TextWidth(ML[i].NameFull);
    if(ML[i].Lev>L1)
    L1=ML[i].Lev;
 
}
TreeView1->Width=35+MaxS+(hh+4)*L1;
TreeView1->Height=(hh+4)*TreeView1->Items->Count;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2017, 11:28
Ответы с готовыми решениями:

Относительные размеры компонентов на форме
Доброго времени суток. Собственно вопрос, каким образом размеры и расположение компонентов на форме можно сделать относительным, ибо...

TChart реальные размеры BackImage в пикселях на форме
Меня интересует тонкая настройка TChart и для этого требуется знать точные размеры BackImage. И есть ли какие-нибудь способы их поменять в...

размеры компонентов в форме qt
Здравствуйте,я написал программу,в которой при выборе в меню геометрической фигуры, она отображается на экране.Подскажите,пожалуйста,что...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.02.2017, 14:07
Вообще-то у TTreeNode есть метод DisplayRect, по результату которого можно узнать и высоту и ширину узла (если третий параметр будет true - то вернутся именно размеры текста)
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.02.2017, 15:11  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Вообще-то у TTreeNode есть метод DisplayRect
вот спасибки!

Добавлено через 15 минут
а всю ширину узла можно узнать? Я там вижу только один параметр.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.02.2017, 15:27
Если третий параметр выставлен в False - то будут показаны размеры для всего Item-а, а не только для текста в нем.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.02.2017, 16:45  [ТС]
чего то не понимаю, где эти параметры? в DisplayRect я вижу только один параметр типа bool...или это параметры Rect..чего то не догнать
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.02.2017, 17:04
Ну да. Это я не туда посмотрел. Разумеется, единственный параметр. Смотри:
C++
1
2
3
4
5
6
    TRect r = TreeView1->Items->Item[0]->DisplayRect(false); // <--- весь айтем
    Memo2->Lines->Add(String().sprintf(L"Ширина = %d, Высота = %d, Ширина TreeView = %d",
        r.Right - r.Left, r.Bottom - r.Top, TreeView1->Width));
    r = TreeView1->Items->Item[0]->DisplayRect(true); // <--- только текст
    Memo2->Lines->Add(String().sprintf(L"Ширина = %d, Высота = %d",
        r.Right - r.Left, r.Bottom - r.Top));
Миниатюры
Размеры TreeView на форме  
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.02.2017, 17:51  [ТС]
То есть, если я правильно понимаю, мой способ не был далек от истины. В данном случае, имея например TreeView1->Items->Count нодов, максимальное количество вложений - Lev и ширину StateImages=25, можно вычислить желаемую ширину дерева (с учетом скрола) таким образом
C++
1
2
3
4
5
6
7
8
9
10
11
TRect RectTV;int Lev=0;int WSize=0;
for(int i=0;i<TreeView1->Items->Count;i++)
{
    RectTV=TreeView1->Items->Item[i]->DisplayRect(true);
    if(RectTV.Right - RectTV.Left>WSize)
    WSize=RectTV.Right - RectTV.Left;
 
    if(TreeView1->Items->Item[i]->Level+1>Lev)
    Lev=TreeView1->Items->Item[i]->Level+1;
}
TreeView1->Width= 30+WSize+Lev*25;
Правильно? Или как то более по феншую можно?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
17.02.2017, 18:37
Можно сделать так:
C++
1
2
3
4
5
6
7
8
    TRect r;
    int wid = 0;
    for(int i = 0; i < TreeView1->Items->Count; i++)
    {
        r = TreeView1->Items->Item[i]->DisplayRect(true);
        wid = Max(r.Right, wid); // правый край сразу покажет, где должен завершиться узел, уже не надо учитывать уровень
    }
    TreeView1->Width = wid + {ширина скролла}
, но учти, что это будет работать только с видимыми узлами дерева, для невидимых DisplayRect возвращает нули...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.02.2017, 19:39  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2017, 19:39
Помогаю со студенческими работами здесь

Размеры и положение элементов на форме
Доброго времени. Подскажите, как реализовать динамическое изменение положения и размера элементов на форме? Это встречается,...

Размеры формы автоматического фильтра в табличной форме
Добрый день. Столкнулся с таким вопросом от пользователя базы. В его базе, которую я для него сделал, часто используются табличные...

Запомнить положение и размеры всех конролов на форме
Собственно есть базовый класс SettProg, который содержит список состоящий из одинаковых экземпляров класса ContrInfo, который содержит...

Как пропорционально изменять размеры объектов на форме
Как пропорционально изменять размеры объектов на форме, чтобы они также изменялись вместе с изменением ширины и высоты формы? При этом низ...

Treeview в форме
Здравствуйте! Есть задача при запуске Access что бы появлялось окно схемы базы. Есть несколько таблиц &quot;Главная&quot;, Т1, Т2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru