ПОЗНАЙ ИНТУИТА, Лекция, Дървета
Целта на лекцията
Използване на компонента TTreeView за работа с дървовидни йерархични данни.
TTreeView
Компонентът TTreeView се намира враздела Common Controls на Component Paletteи е проектиран да показва различни дървовидни йерархични структури:
Често срещаме йерархична информация. Това може да е т.нар.Дърво на директориив стандартния Windows Explorer, което показва външните и подпапките и съхранените там файлове като дървовидни клонове. Това може да бъде структура на предприятие, библиотечен каталогизатор, структура на книга, резюме, курсова работа ... Като цяло, разнообразие от информация, в която има родителски и дъщерни (вложени) обекти. Всички такива обекти могат да бъдат показани с помощта на компонента 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. Настройки на свойствата на бутонанадпис на иметоbНов възел | Нов раздел |
bNewChildNode | Нов подраздел |
bИзтриване | Изтрий |
bРедактиране | Преименуване |
bСортиране | Вид |
bСвиване | Свиване на списъка |
bРазширяване | Разгъване на списъка |
Сега отдясно на панела, от разделаОбщи контролиинсталирайте компонента TTreeView. Тъй като имаме едно дърво, няма да го преименуваме. Също така задайте свойството Align на дървото на alLeft и задайте свойството Width на 360px. Върху TTreeView от същия раздел задайте списъка с изображения TImageList, ние също няма да го преименуваме. В резултат на това трябва да получим следната форма:

Както можете да видите, има малко място, останало от дясната страна на формуляра след TreeView1. Сега само ще научим как да извършваме различни действия с компонента TTreeView, а по-късно, в друга лекция, ще се върнем към този проект и от дясната страна ще покажем книги, коитопринадлежат към този раздел на библиотеката.
И така, изберете дървото TreeView1 и обърнете внимание на неговите свойства. Ще разгледаме само основните, които все още не сме срещали в други компоненти.
Свойства на TTreeView
автоматично разширяване | - ако е True, тогава дървото се разширява автоматично, когато програмата започне да работи, в противен случай списъкът остава свит. Искаме дървото да бъде разширено, така че задайте това на True. |
HideSelection | - ако е True, тогава когато компонентът загуби фокус (друг компонент стане активен), изборът на текущия възел ще бъде скрит. Е, това е въпрос на вкус, можете да оставите стойността по подразбиране - True . |
изображения | - тук трябва да изберете списък с изображения, ако искате родителските и дъщерните възли да имат различни икони. Нека изберем ImageList1 тук и ще изберем подходящите снимки по-късно. |
отстъп | - разстояние в пиксели от левия възел до неговите подвъзли. По подразбиране е 15 пиксела и препоръчвам да не намалявате това разстояние. В противен случай възлите на дървото ще бъдат разположени близо един до друг, сякаш се слепват, което ще затрудни четенето на списъка. |
Предмети | - самият списък, основното свойство на компонента. Когато щракнете върху бутона "…", се появяваРедактор на дървовидни елементи: |

MultiSelect | - ако е True, тогава позволява едновременен избор на няколко възела; ако е False - забранява. |
MultiSelectStyle | - ключове, които определят как да изберете множество възли. Има четири превключвателя, ако са настроени на True, тогава този метод работи, в противен случай не работи:
|
Щракнете с десния бутон Избор | - ако е True, възлите се избират както с ляв, така и с десен бутон на мишката; когато False - само лявата. |
RowSelect | - при True се избира целият ред на елемента, при False - само името му. Безполезна собственост, трябва да кажа. |
ленти за превъртане | - ленти за превъртане, запознати сте с тях от компонента TMemo. Препоръчвам да зададете това свойство на ssAutoBoth. |
ShowButtons | - разрешава (когато е True ) или забранява показването на бутони близо до възлите. Обикновено това позволява, след това вляво от затворения възел ще има бутон с плюс, от отворения - с минус. |
ShowLines | - позволява показване на клони на дървета. Препоръчително е да оставите True. |
ShowRoot | - позволява показване на линия, идваща от корена на дървото. Ако ShowLines = False, така или иначе няма да се показват никакви редове. |
тип сортиране | - начин за сортиране на списъка. Ще се върнем към този имот по-късно в програмата. Може би:
TreeLineColor и TreeLinePenStyle отговарят за цвета и вида на линиите на клоните на дървото. Методи на TTreeView |
AlphaSort | е друг начин за сортиране на списъка.Извиква се така: Методът връща True, ако сортирането е било успешно, и False в противен случай. |
Пълен колапс | - свива дървото, скривайки всички негови дъщерни възли. |
FullExpand | - напротив, разгъва дървото. |
LoadFromFile | - методът чете информация за възлите от текстов файл. Файлът се записва във формат UTF-8. Дъщерните възли са под родителските възли и са изместени надясно с табулатор. Преди употреба е желателно да се провери реалното съществуване на файла. |
SaveToFile | - напротив, записва дървовидната структура в текстов файл. |
TTreeView събития
Компонентът има няколко конкретни събития, които може да намерите за полезни.