Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > VirtualTreeView + разворачивание формы


Автор: Erazer 19.6.2008, 01:19
Есть,VirtualTreeView, с несколькими колонками, при увеличении размеров формы оно тоже должно увеличиваться, должны становиться шире колонки/колонка, где и как это настроить ? Или как быть ?

Автор: gta4kv 19.6.2008, 01:24
в .net есть такой параметр как "Dock", в делфи что-то подобное, уже не помню.

Автор: Erazer 19.6.2008, 10:55
вернее хотелось бы сделать так чтобы увеличение VTV происходило за счет первой колонки, а ширина остальных оставалась прежней.

Автор: aktuba 19.6.2008, 12:19
Цитата(Erazer @  19.6.2008,  11:55 Найти цитируемый пост)
вернее хотелось бы сделать так чтобы увеличение VTV происходило за счет первой колонки, а ширина остальных оставалась прежней. 

А документацию посмотреть? В Header.Options свойство AutoSize в True + в Header свойство AutoSizeColumn поставь нужную тебе колонку.

P.S.: названия свойств писал по памяти, могу ошибаться.

Автор: Doga 19.6.2008, 12:24
Привет.

Для этого следует использовать обработчик события VirtualTreeView OnResize. Примерно с таким кодом (для случая с тремя колонками):

Код

VirtualStringTree1.Header.Columns.Items[0].Width := VirtualStringTree1.ClientWidth - VirtualStringTree1.Header.Columns.Items[1].Width - VirtualStringTree1.Header.Columns.Items[2].Width;

Автор: Erazer 19.6.2008, 21:47
Цитата(aktuba @  19.6.2008,  12:19 Найти цитируемый пост)
названия свойств писал по памяти
 очжаль,т.к. ничего из вышеуказанного найти не удалось smile

Добавлено через 3 минуты и 23 секунды
Doga, пасип, то шо доктор прописал  smile 

Автор: Erazer 19.6.2008, 23:03
пришлось перевесить на FormResize,т.к. на 
Цитата(Doga @  19.6.2008,  12:24 Найти цитируемый пост)
VirtualTreeView OnResize
 VTV неадекватно себя ведет,нельзя изменить ширину первой колонки, но можно других,но при этом их ширина меняется через зад скажем так,т.е. тянем за правую границу а двигается левая  smile .

Автор: aktuba 20.6.2008, 14:16
Цитата(Doga @ 19.6.2008,  13:24)
Привет.

Для этого следует использовать обработчик события VirtualTreeView OnResize. Примерно с таким кодом (для случая с тремя колонками):

Код

VirtualStringTree1.Header.Columns.Items[0].Width := VirtualStringTree1.ClientWidth - VirtualStringTree1.Header.Columns.Items[1].Width - VirtualStringTree1.Header.Columns.Items[2].Width;

Это что-за бред такой??? Может сначала доку посмотреть, а потом такие "умные" советы давать?
Приложил тестовый проект - посмотри его.

Автор: Erazer 22.6.2008, 13:11
Пасип пасатрел, как раз такое поведение делается на раз два,но при этом
Цитата(Erazer @  19.6.2008,  23:03 Найти цитируемый пост)
 VTV неадекватно себя ведет,нельзя изменить ширину первой колонки, но можно других,но при этом их ширина меняется через зад скажем так,т.е. тянем за правую границу а двигается левая 
 а если 
Код

VirtualStringTree1.Header.Columns.Items[0].Width := VirtualStringTree1.ClientWidth - VirtualStringTree1.Header.Columns.Items[1].Width - VirtualStringTree1.Header.Columns.Items[2].Width;
 + 
Цитата(Erazer @  19.6.2008,  23:03 Найти цитируемый пост)
VirtualTreeView OnResize
 то все пашет ка надо 
так адекватнее на мой взгляд:

Автор: aktuba 22.6.2008, 13:31
Кому как... Мне стандартный вариант более понятен и предсказуем...

Автор: Erazer 22.6.2008, 16:49
Цитата(aktuba @  22.6.2008,  13:31 Найти цитируемый пост)
Мне стандартный вариант более понятен и предсказуем... 
 ну эт точно кому как, в качестве ориентира я использую Easy CD-DA Extractor,не самая неизвестная прога,и поведение грида в ней и в моем примере мне кажется все же более адекватным с точки зрения логики чем в твоем. smile

Добавлено через 1 минуту и 36 секунд
ну если я тащу правую гранцу столбца то она и должна перемещаться в право, а не вместо этого  левая влево...  smile какая-то извращенная логика действия получается  smile 

Автор: aktuba 23.6.2008, 10:08
Цитата(Erazer @  22.6.2008,  17:49 Найти цитируемый пост)
ну если я тащу правую гранцу столбца то она и должна перемещаться в право, а не вместо этого  левая влево...  smile какая-то извращенная логика действия получается  smile  

Тогда зачем заставлять программу делать авторасчет ширины столбцов? Смотри, исходить надо из того, что общая ширина столбцов всегда фиксированная. Теперь, когда ты тянешь столбец вправо, общая ширина, соответственно, увеличивается, но программа тут-же уменьшает ее до максимальной, поэтому и получается, что тянешь вправо, а тянется влево.

Автор: Erazer 23.6.2008, 10:50
Цитата(aktuba @  23.6.2008,  10:08 Найти цитируемый пост)
зачем заставлять программу делать авторасчет ширины столбцов

ну я не вижу смысла увеличивать ширину других колонок кроме первой,т.к. жанр, год,номер трека (прмменительно к аудиофайлу )не требуют увеличения ширины колонок,точнее она им не нужна я бы сказал, а вот имя файла зачустую очдлинное и его колонку как раз можно бы и увеличить при раскрытии проги на весь экран, но при этом еще разумно было бы оставить за пользователем возможность изменять размеры колонок вручную, причем любых - мало ли что ему захочется рассмотреть?! вот поэтому ниболее адекватным я считаю в моем примере.

Цитата(aktuba @  23.6.2008,  10:08 Найти цитируемый пост)
поэтому и получается, что тянешь вправо, а тянется влево. 
 - ну согласись что это выглядит странно без приложенного объяснения, т.е. с точки зрения внутреннего устройства все логично , но в привычном нам мире это неестественно.  ты же не делаешь шаг левой ногой чтобы сдвинуться вправо ?! smile и ни в 1 проге я подобного поведения не встречал.

Автор: aktuba 23.6.2008, 13:24
Цитата(Erazer @  23.6.2008,  11:50 Найти цитируемый пост)
- ну согласись что это выглядит странно без приложенного объяснения, т.е. с точки зрения внутреннего устройства все логично , но в привычном нам мире это неестественно.  ты же не делаешь шаг левой ногой чтобы сдвинуться вправо ?! smile и ни в 1 проге я подобного поведения не встречал.

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

Добавлено через 36 секунд
Авторесайз нужен тогда, когда не нужна возможность изменения ширины колонок в ручную, например, когда есть только одна колонка.

Автор: Erazer 25.6.2008, 01:27
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)