Juri Shutenko Personal Homepage. Visual FoxPro.

ActiveX компонент TreeView. Часть 1. Введение.

Для начала приведу текст справки из руководства.

TreeView отображает иерархический список узловых объектов, именуемых Node, каждый из которых состоит из метки и необязательной картинки формата bitmap. Типичное использование TreeView заключается в отображении заголовков в документах, файлов и каталогов на диске или любого другого вида информации, которую удобнее отображать в виде иерархического списка.

Полезный компонент? Несомненно.Что же указывается в руководстве далее...

После описания компонента TreeView вы можете добавлять, удалять, преображать, в общем манипулировать узловыми объектами (закрепим в памяти наименование узлового объекта - Node) при помощи установки свойств и вызовов методов. (То есть то, что мы обычно и делаем с объектами в VFP). Вы можете программным путем разворачивать или сворачивать узловые объекты для отображения или скрытия всех дочерних узловых объектов. Программную функциональность компонента обеспечивают три события - Collapse, Expand и NodeClick.

Замечательно. Осталось научиться пользоваться столь полезным компонентом. И вот здесь начинаются трудности, если судить по вопросам, задаваемым программистами относительно этого ActiveX. (Хотя трудности, как выяснилось в большинстве своем связаны или с незнанием английского языка, или просто с нежеланием прочесть руководство. Хотя здесь есть вина и Microsoft, поскольку файл поддержки скомпилирован весьма дурно. Ну что ж, каждый работает как может...)

Среди полученных вопросов основные были связаны с привязкой баз даных и управлением компонентом. Но были и вопросы новичков, связанные со встраиванием компонента в приложение, поэтому логично пройтись по нему "ab ovo", то есть от яйца - с самого начала и до конца.

Как ввести компонент TreeView в приложение?

Компонент TreeView относится к классу OLE-компонентов, то есть он может быть встроен в любой объект, обеспечивающий функциональную поддержку OLE-компонентов. Таким объектом в VFP является форма или пользовательский контейнер (который, по сути, базируется на основе той же формы). Для ввода компонента TreeView, откройте форму, в которую вы собираетесь встроить OLE-компонент, или создайте новую.

Выберите из системного меню VFP Tools пункт Component Gallery. Откроется окно "Catalogs - Component Gallery". В левом фрейме окна имеется дерево, в котором нужно развернуть узел ActiveX Catalog (если он свернут, разумеется). После этого разверните папку Controlsи выберите пункт Installed controls. В правом фрейме появится список установленных компонентов. Расширьте колонку Object и найдите в списке Microsoft TreeView Control, version 6.0. Выберите его щелчком по левой клавише мыши, затем щелкните по правой клавише мыши и из всплывающего меню  выберите пункт - Add to form и в расширении меню выберите имя вашей формы, в которую вы хотите встроить компонент. Если у вас открыта для редактирования одна формы, то именно ее имя и будет в списке расширения всплывающего меню  Add to form

Готово? В окне редактирования форм вы увидите примерно такую форму.

Basic example of the form with TreeView Activex
Рис. Базовая форма с внесенным компонентом ActiveX TreeView в окне Form Designer.

Не будем пока связываться с компонентом ImageList, который позволит вам вставлять свои собственные картинки в узлы. Мы это сделаем чуть позже.

Как установить свойства TreeView?

Eсть одна маленькая особенность, связанная со многими компонентами ActiveX, которые можно использовать совместно с VFP 6.0.Попробуйте выполнить щелчок по правой клавише мыши на TreeView компоненте, размещенном в вашей форме. Обратите внимание, что всплывающее меню объекта формы видоизменилось и в самой нижней строке указано - TreeCtrl Properties.Выберите этот пункт из меню. Откроется новое окно TreeCtrl Properties с тремя закладками - General, Font, Picture. Здесь вы сможете установить свойства, присущие этому объекту как компонента семейства Windows Controls. При этом Windows соберет свойства уже присвоенные вами этому компоненту, так что возможна некоторая задержка при попытке установить или изменить какие-то свойства.
А что же покажет нам наш привычный инструмент - Properties. Да многое, только большая часть свойств объекта TreeView, место которым логично было бы определить в закладке Layout окна Properties VFP, размещены в закладке All, а из поля,  у которого в качестве величины указано значение Object вы сможете попасть в упомянутое выше окно установки свойств TreeCtrl roperties.Так что можно пользоваться обоими окнами редактирования свойств компонента.

Обратимся к свойствам компонента.
На странице под закладкой General вы найдете:

9 комбинированных боксов:

Свойство По умолчанию Варианты
Style 7-tvwTreelinesPlusMinusPictureText 0-tvwTextOnly
1-tvwPictureText
2-tvwPlusMinusText
3-tvwPlusPictureText
4-tvwTreelinesText
5-tvwTreelinesPictureText
6-tvwTreelinesPlusMinusText
7-tvwTreelinesPlusMinusPictureText
если вы желаете использовать картинки с этим компонентом, тогда выберите подходящий вариант с обязательным наличием слова Picture. Однако, если вы выберите значение 7 или иное, с включенным в описание свойства словом Picture, это совсем НЕ означает, что вы ОБЯЗАНЫ использовать картинки с этим компонентом!
MousePointer  0-ccDefault Куча (16) стандартных вариантов указателя мыши, плюс пользовательский. Любители спецэффектов могут установить значение этого свойства в 99 и использовать свою собственную иконку для указателя мыши.
LineStyle  0-tvwTreelines 0-tvwTreelines
1-tvwRootLines
свойство устанавливается, если вы выбрали значение  Style равным от 4 до 7. Если вы желаете показать вертикальные линии установите значение этого свойства в 1.Кроме того, если Вы желаете, чтобы у родительского элемента указывался бы плюсик, означающий, что родительский элемент имеет дочерние ветви, установите значение этого свойства также равным 1.
LabelEdit  0-tvwAutomatic 0-tvwAutomatic
1-tvwManual
для полного контроля над компонентом установите значение этого свойства равным 1.
ImageList  <None> Определенный вами компонент ImageList
BorderStyle  0-ccNone 0-ccNone
1-ccFixedSingle
свойство устанавливается, если вы выбрали значение Appearance равным 0. Если вы установили трехмерное изображение в Appearance (1), то игнорируется.
Appearance  1-cc3d 0-ccFlat
1-cc3D
OLEDragMode  0-ccDragManul 0-ccDragManual
1-ccDragAutomatic
на ваше усмотрение, в зависимости от вашей привычки работы с методами Drag&Drop
OLEDropMode  0-ccOLEDropNone 0-ccOLEDropNone
1-ccOLEDropManual
если вы желаете корректно использовать Drag&Drop метод установите это значение в 1

Два поля ввода свойств:

Свойство По умолчанию Варианты
Indentation 38 Устанавливает отступ по вертикали дочерних ветвей от родительских
Path separator \ Используется при обращении к свойству Path из программы, для определения глубины отношений между дочерними и родительскими ветвями. Весьма полезное свойство!

И восемь check-boxes:

Свойство По умолчанию Варианты
HideSelection  отмечен Сие означает, желаете-ли вы оставить выбранную ветку подсвеченной, когда вы переходите к другому объекту в форме?
На ваше усмотрение, однако удобно, оставлять подсветку выбранной ветки, при потере компонентом фокуса. В этом случае снимите метку с этого check-box.
Sorted   Как и везде означает - Желаете-ли вы сортировать текст меток?
На ваше усмотрение.
FullRowSelect   Означает - будет-ли подсвечиваться строка выбранного элемента TreeView во всю ширину компонента или только текст метки
Enabled  отмечен Комментарии излишни.
CheckBoxes   Включать или не включать check-box элемент перед текстом метки.
Очень важное свойство. Включение check-box элемента дает вам возможность дополнительного контроля над элементом, посредством свойства NodeChecked.
SingleSelect   Сие означает - Будет-ли свертываться ранее выбранный элемент, имеющий дочерние ветки, при выборе другого элемента. Упрощает просмотр содержимого.
Scroll  отмечен Как и везде означает - Желаете-ли вы отображать ползунки просмотров на компоненте?
HotTracking   При перемещении указателя мыши поверх компонента, каждый элемент, над которым в данный конкретный момент времени будет проходить указатель мыши будет подчеркиваться тонкой линией.

Я не буду комментировать остальные две закладки, там и так все ясно. Одно только замечание по шрифту. На некоторых версиях Winbdows 9х, шрифт по умолчанию установлен в дробную величину 8,25. Если вы попробуете установить размер точно равным 8, то компонент проигнорирует ваше желание. Дробная величина не связана также и с локализацией, что можно было бы предположить. Больше - пожалуйста. Скорее всего это связано с увязкой иконок по умолчанию (плюс/минус).

Вот собственно и все с размещением и определением ряда основных свойств.

Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.