НОУ ІНТУІТ, Лекція, Дерева

Ціль лекції

Застосовує компонент 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), інші - трохи нижче, щоб між кнопками була зовсім невелика відстань. Нам потрібно перейменувати кнопки та зробити на них відповідні написи. Зробіть налаштування кнопок:

Таблиця 19.1. Налаштування властивостей кнопокName Caption
bNewNodeНовий розділ
bNewChildNodeНовий підрозділ
bDeleteвидалити
bEditПерейменувати
bSortСортувати
bCollapseЗгорнути список
bExpandРозгорнути список

Тепер, праворуч від панелі, з вкладкиCommon Controlsвстановіть компонент TTreeView . Оскільки дерево у нас одне, перейменовувати його ми не будемо. У якості Align дерева також встановіть значення alLeft, у властивості Width встановіть 360 пікселів. Поверх TTreeView з цієї вкладки встановіть список зображень TImageList , його теж перейменовувати не будемо. В результаті у нас має вийти ось така форма:

TTreeView

Як бачите, у правій частині форми після TreeView1 залишилося небагато місця. Зараз ми навчимося тільки робити різні дії з компонентом TTreeView, а пізніше, в іншій лекції, ми повернемося до цього проекту, і в правій частині зробимо відображення книг, якіналежать до цього розділу бібліотеки.

Отже, виділіть дерево TreeView1 та зверніть увагу на його властивості. Ми розглянемо лише основні, з якими ще стикалися в інших компонентах.

Властивості TTreeView

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

інтуіт

MultiSelect- якщо True , то дозволяє одночасне виділення кількох вузлів; якщо False – забороняє.
MultiSelectStyle- Перемикачі, які визначають спосіб виділення кількох вузлів. Перемикач чотири, якщо вони мають значення True , то даний спосіб працює, інакше не працює:
  • msControlSelect - з натиснутою та утримуваною, коли клацають по елементахсписку у довільному порядку.
  • msShiftSelect - з натиснутою та утримуваною , коли вибирають відразу діапазон елементів, клацаючи спочатку по першому, потім по останньому елементу.
  • msSiblingOnly - як msShiftSelect , але в діапазон включаються лише вузли одного рівня.
  • msVisibleOnly - як msShiftSelect , але в діапазоні не включаються нерозкриті дочірні вузли.
RightClickSelect- при True вузли виділяються як лівою, і правою кнопкою миші; при False – тільки лівий.
RowSelect- при True виділяється весь рядок елемента, при False – лише його ім'я. Марна властивість, треба сказати.
ScrollBars- Смуги прокручування, з ними ви знайомі по компоненту TMemo. Рекомендую встановлювати в цій властивості значення ssAutoBoth.
ShowButtons- дозволяє (при True) або забороняє показ кнопок біля вузлів. Зазвичай дозволяє, тоді ліворуч від закритого вузла буде кнопка з плюсом, від відкритого – з мінусом.
ShowLines- Дозволяє показ ліній гілок дерева. Бажано залишати True.
ShowRoot- дозволяє показ лінії, що йде від кореня дерева. Якщо ShowLines = False , то жодних ліній не буде показано у будь-якому випадку.
SortType- Спосіб сортування списку. До цієї властивості ми ще повернемося до програми. Можливо:
  • stNone - немає сортування.
  • stText – сортування за текстом.
  • stData – сортування за даними.
  • stBoth – сортування і за текстом, і за даними.

TreeLineColor та TreeLinePenStyle відповідають за колір та тип ліній гілок дерева.

Методи TTreeView

AlphaSort- Ще один спосіб відсортувати список.Викликається так: Метод повертає True якщо сортування пройшло успішно, і False в іншому випадку.
FullCollapse- Згортає дерево, приховуючи всі його дочірні вузли.
FullExpand- Навпаки, розгортає дерево.
LoadFromFile- метод зчитує інформацію про сайти з текстового файла. Файл зберігається у форматі UTF-8. Дочірні вузли знаходяться нижче батьківських і зрушені праворуч символом табулятора. Перед використанням бажано перевіряти реальну наявність файлу.
SaveToFile- навпаки, зберігає структуру дерева у текстовий файл.

Події TTreeView

Компонент має кілька специфічних подій, які можуть бути корисними.