НОУ ІНТУІТ, Лекція, Дерева
Ціль лекції
Застосовує компонент TTreeView для роботи з деревоподібними ієрархічними даними.
Дерево TTreeView
Компонент TTreeView розташований на вкладціCommon Controls Палітри компонентів, і призначений для відображення різних деревоподібних ієрархічних структур:
Ми часто зустрічаємося з ієрархічною інформацією. Це може бути т.зв.Дерево каталогіву стандартному Провіднику Windows , яке відображає у вигляді гілок дерева зовнішні та вкладені папки, та файли, які там зберігаються. Це може бути структура підприємства, бібліотечний каталогізатор, структура книги, реферату, курсової ... Загалом, найрізноманітніша інформація, в якій присутні батьківські та дочірні (вкладені) об'єкти. Всі подібні об'єкти можна відобразити за допомогою TTreeView .
Об'єкти, які у цьому компоненті називаються вузлами (англ.node), а сам компонент є список вузлів. Подібно до списків TListBox і TComboBox , з якими ми вже знайомі, TTreeView має властивість Items - індексований список вузлів. Кожен вузол - це об'єкт, який має тип TTreeNode. І батьківські, і вкладені у яких дочірні елементи - це вузли (об'єкти) типу TTreeNode . Причому дочірній елемент одночасно може бути батьком щодо іншого вузла, рівень вкладеності необмежений.
Але давайте все по порядку. Розглянемо роботу компонента з прикладу бібліотечного каталогу. ВідкрийтеLazarusз новим проектом. Як завжди, форму назвітьfMain, проект збережіть під ім'ям MyLibrary в папку19-01, модулю форми дайте ім'яMain. Як Caption форми напишітьБібліотечний каталог. Саму форму трохи розтягніть, нехай у нас буде висота 350, а ширина 500 пікселів.
Далі,встановимо на форму просту панель TPanel, з неї ми зробимо своєріднуПанель інструментів програми. У панелі очистіть властивість Caption , як Align встановіть alLeft , як Width 127 пікселів.
Далі, на отримануПанель інструментіводну за одною встановіть 7 простих кнопокTButton. У всіх кнопок у властивості Left встановіть значення 1, а у властивості Width - значення 125. Верхню кнопку розташуйте вище (Top = 1), інші - трохи нижче, щоб між кнопками була зовсім невелика відстань. Нам потрібно перейменувати кнопки та зробити на них відповідні написи. Зробіть налаштування кнопок:
| bNewNode | Новий розділ |
| bNewChildNode | Новий підрозділ |
| bDelete | видалити |
| bEdit | Перейменувати |
| bSort | Сортувати |
| bCollapse | Згорнути список |
| bExpand | Розгорнути список |
Тепер, праворуч від панелі, з вкладкиCommon Controlsвстановіть компонент TTreeView . Оскільки дерево у нас одне, перейменовувати його ми не будемо. У якості Align дерева також встановіть значення alLeft, у властивості Width встановіть 360 пікселів. Поверх TTreeView з цієї вкладки встановіть список зображень TImageList , його теж перейменовувати не будемо. В результаті у нас має вийти ось така форма:

Як бачите, у правій частині форми після TreeView1 залишилося небагато місця. Зараз ми навчимося тільки робити різні дії з компонентом TTreeView, а пізніше, в іншій лекції, ми повернемося до цього проекту, і в правій частині зробимо відображення книг, якіналежать до цього розділу бібліотеки.
Отже, виділіть дерево TreeView1 та зверніть увагу на його властивості. Ми розглянемо лише основні, з якими ще стикалися в інших компонентах.
Властивості TTreeView
| AutoExpand | - якщо True, то дерево автоматично відкривається, коли програма починає працювати, інакше список залишається згорнутим. Нам бажано, щоб дерево було відчинене, тому встановіть значення True . |
| HideSelection | - якщо True , коли компонент втрачає фокус (активним стає інший компонент), виділення поточного вузла буде приховано. Ну, це справа смаку, можна залишити значення за умовчанням - True. |
| Images | - тут потрібно вибрати список зображень, якщо хочете, щоб батьківські та дочірні вузли мали різні піктограми. Виберемо тут ImageList1, а відповідні картинки підберемо пізніше. |
| Indent | - Відстань у пікселях від лівого вузла до його підвузлів. За замовчуванням 15 пікселів, і я рекомендую цю відстань не зменшувати. Інакше вузли дерева будуть розташовані близько один від одного, як би злипнутися, що ускладнить читання списку. |
| Items | - сам список, основне властивість компонента. При натисканні на кнопку "…" виходитьРедактор елементів дерева: |

| MultiSelect | - якщо True , то дозволяє одночасне виділення кількох вузлів; якщо False – забороняє. |
| MultiSelectStyle | - Перемикачі, які визначають спосіб виділення кількох вузлів. Перемикач чотири, якщо вони мають значення True , то даний спосіб працює, інакше не працює:
|
| RightClickSelect | - при True вузли виділяються як лівою, і правою кнопкою миші; при False – тільки лівий. |
| RowSelect | - при True виділяється весь рядок елемента, при False – лише його ім'я. Марна властивість, треба сказати. |
| ScrollBars | - Смуги прокручування, з ними ви знайомі по компоненту TMemo. Рекомендую встановлювати в цій властивості значення ssAutoBoth. |
| ShowButtons | - дозволяє (при True) або забороняє показ кнопок біля вузлів. Зазвичай дозволяє, тоді ліворуч від закритого вузла буде кнопка з плюсом, від відкритого – з мінусом. |
| ShowLines | - Дозволяє показ ліній гілок дерева. Бажано залишати True. |
| ShowRoot | - дозволяє показ лінії, що йде від кореня дерева. Якщо ShowLines = False , то жодних ліній не буде показано у будь-якому випадку. |
| SortType | - Спосіб сортування списку. До цієї властивості ми ще повернемося до програми. Можливо:
TreeLineColor та TreeLinePenStyle відповідають за колір та тип ліній гілок дерева. Методи TTreeView |
| AlphaSort | - Ще один спосіб відсортувати список.Викликається так: Метод повертає True якщо сортування пройшло успішно, і False в іншому випадку. |
| FullCollapse | - Згортає дерево, приховуючи всі його дочірні вузли. |
| FullExpand | - Навпаки, розгортає дерево. |
| LoadFromFile | - метод зчитує інформацію про сайти з текстового файла. Файл зберігається у форматі UTF-8. Дочірні вузли знаходяться нижче батьківських і зрушені праворуч символом табулятора. Перед використанням бажано перевіряти реальну наявність файлу. |
| SaveToFile | - навпаки, зберігає структуру дерева у текстовий файл. |
Події TTreeView
Компонент має кілька специфічних подій, які можуть бути корисними.