ПОЗНАЙ ИНТУИТА, Лекция, Дървета

Целта на лекцията

Използване на компонента 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, тогава този метод работи, в противен случай не работи:
  • msControlSelect - натиска се и се задържа при щракване върху елементисписък в произволен ред.
  • msShiftSelect - Натиска се и се задържа при избиране на диапазон от елементи наведнъж чрез щракване първо върху първия, след това върху последния елемент.
  • msSiblingOnly – Подобно на msShiftSelect, но само братски възли са включени в диапазона.
  • msVisibleOnly - като msShiftSelect, но диапазонът не включва неразширени дъщерни възли.
Щракнете с десния бутон Избор- ако е True, възлите се избират както с ляв, така и с десен бутон на мишката; когато False - само лявата.
RowSelect- при True се избира целият ред на елемента, при False - само името му. Безполезна собственост, трябва да кажа.
ленти за превъртане- ленти за превъртане, запознати сте с тях от компонента TMemo. Препоръчвам да зададете това свойство на ssAutoBoth.
ShowButtons- разрешава (когато е True ) или забранява показването на бутони близо до възлите. Обикновено това позволява, след това вляво от затворения възел ще има бутон с плюс, от отворения - с минус.
ShowLines- позволява показване на клони на дървета. Препоръчително е да оставите True.
ShowRoot- позволява показване на линия, идваща от корена на дървото. Ако ShowLines = False, така или иначе няма да се показват никакви редове.
тип сортиране- начин за сортиране на списъка. Ще се върнем към този имот по-късно в програмата. Може би:
  • stNone - без сортиране.
  • stText - сортиране по текст.
  • stData - сортиране по данни.
  • stBoth - сортиране както по текст, така и по данни.

TreeLineColor и TreeLinePenStyle отговарят за цвета и вида на линиите на клоните на дървото.

Методи на TTreeView

AlphaSortе друг начин за сортиране на списъка.Извиква се така: Методът връща True, ако сортирането е било успешно, и False в противен случай.
Пълен колапс- свива дървото, скривайки всички негови дъщерни възли.
FullExpand- напротив, разгъва дървото.
LoadFromFile- методът чете информация за възлите от текстов файл. Файлът се записва във формат UTF-8. Дъщерните възли са под родителските възли и са изместени надясно с табулатор. Преди употреба е желателно да се провери реалното съществуване на файла.
SaveToFile- напротив, записва дървовидната структура в текстов файл.

TTreeView събития

Компонентът има няколко конкретни събития, които може да намерите за полезни.