Componentele Ttreeview și tlistview - Capitolul 5

Componenta TTreeView este denumită arbore (figura 5.3).

Componenta TTreeView este titularul componentei TOutiine dezvoltat de Borland pentru Delphi 1 și este destinat afișării informațiilor ierarhice. Inima lui este proprietatea







elemente de proprietate: TTreeNodes;

Fig. 5.3. Aspectul componentei TTreeView

Această proprietate este o listă a tuturor vârfurilor arborelui și o listă care are proprietăți suplimentare utile. Fiecare dintre elementele listă este un obiect de tip TTreeNode. Proprietățile sale sunt rezumate în tabelul. 5.3.

Tabelul 5.3. Listă de proprietăți TTreeNode

Elementele listei apar în mai multe coloane unul sub altul. Primul conține o icoană mică și o inscripție, în rest - o informație definită de programator. Dacă proprietatea ShowColumnHeaders este setată la True, coloanele sunt furnizate cu titluri

Ca și în cazul componentei anterioare, elementele din listă sunt conținute în proprietatea elementelor. Aceasta este de fapt lista; nimic neobișnuit, cu excepția metodelor de adăugare / eliminare, nu există. Fiecare element de listă (obiectul TListitem), la rândul său, este similar cu componenta TTreeNode. Dar el are, de asemenea, o diferență importantă - el poate deveni un purtător al multor informații suplimentare. În plus față de proprietatea Date, are și o proprietate

proprietăți Subltemuri: TStrings;

Cu această proprietate, un întreg set de rânduri și obiecte poate fi asociat cu fiecare element de listă. Dar cum să le arătăm utilizatorilor?

Ei ar trebui, în conformitate cu planul dezvoltatorilor acestui control, să fie afișați în modul de afișare vsReport. În primul rând, creați numărul necesar de antete de coloană (prin umplerea proprietății coloane), având în vedere că primul va fi dedicată textul real al unui element din listă (proprietate legendă). Coloanele ulterioare vor afișa textul liniilor FROM din proprietatea Items. Subltemuri (Figura 5.5).

Fig. 5.5. Aceasta va plasa informațiile componentei TListView în modul vsReport

Elementele din listă pot fi sortate - proprietatea SortType este responsabilă pentru acest lucru. Puteți să sortați elemente nu numai după nume (acest lucru este posibil cu valoarea SortType a stText), dar și prin date (valori stData și stBoth), așa cum se întâmplă în utilitarul Explorer. Pentru a implementa o astfel de sortare, trebuie să rezolvați evenimentele OnColumnClick și OnComparel

var ColNum. integer;

procedura TMainForm.ListViewlColumnClick (Expeditor: TObject; Coloana:

procedura TMainForm.ListViewlCompare (Expeditor: TObject; Iteml, Item2:

TListltem; Date: Integer; var Compară: Integer);

dacă ColNum = 0 atunci // Header

Comparație: = ComparațiStr (Iteml.Caption, Item2 .Caption);

Punctul 2. Subplacții [ColNum-1]); se încheie;

Luați în considerare un exemplu de utilizare a componentelor TTreeview și TListview. Unde va fi utilă cererea comună? Să selectăm datele din registrul sistemului pentru acest lucru. Pe de o parte, cheile din registru sunt ordonate ierarhic. Pe de altă parte, fiecare dintre ele poate avea mai multe

diferite tipuri de valori. Astfel, am ajuns aproape la aceeași decizie ca dezvoltatorii de Microsoft, a creat utilitarul Registry Editor - Butoanele stânga copac, dreapta - extins lista a conținutului lor.







Figura 5.6. Aplicația Mini-registru de browser Și aici este tot codul sursă:

Listing 5.1. Mini-aplicație de registru-browser, modul principal

Windows, Mesaje, SysUtils, Clase, Grafică, Controale, Formulare, Dialoguri,

StdCtrls, Rețele, Outline, ComCtrls, ImgList, ExtCtrls;

procedura FormCreate (expeditor: TObject);

procedura TreeViewlChange (expeditor: TObject; nod: TTreeNode);

procedura FormDestroy (expeditor: TObject);

procedura TreeViewlExpanded (expeditor: TObject; nod: TTreeNode);

procedura TreeViewlGetlmagelndex (expeditor: TObject; nod: TTreeNode);

procedura ShowSubKeys (ParentNode: TTreeNode; adâncime: Integer);

funcția GetFullNodeName (Nod: TTreeNode): șir;

dacă este extins apoi Imagelndex: = 2

altceva Imagelndex: = 3;

Pentru a lucra cu registrul sistemului, utilizați obiectul VCL TRegistry, care încorporează cu succes toate funcțiile API-ului Windows destinat acestui scop. În procedura de tratare a evenimentului OnCreate din formularul principal, este creat un obiect Reg și două antete (proprietatea Coloane) sunt adăugate în lista Listview1.

Explicația necesită principiul construirii unui arbore al cheilor. În primul rând, această aplicație afișează numai una dintre cheile de sistem (și anume HKEY_LOCAL_MACHINE); dacă doriți, îl puteți înlocui sau puteți adăuga restul. În al doilea rând, încercarea de a construi întregul copac cheie "răspândit" durează imediat prea mult timp și cu siguranță nu atrage utilizatorii. Rețineți, deoarece utilitarul Registry Editor funcționează destul de repede. Prin urmare, este necesar să se construiască un copac dinamic - a crea și afișa nodurile copii, la momentul de desfășurare a nodului părinte. Pentru aceasta, se folosește evenimentul OnExpand al componentei TreeView1.

Să ne oprim o secundă. Și care noduri ar trebui marcate cu butonul de extensie (marcat cu "+"), deoarece nodul părinte încă nu are copii? Drumul este să verifici dacă există copii în momentul în care este construită cheia. Dacă da, atunci se adaugă o cheie necompletată. Singurul său rol este să lase sistemul să pună "+" împotriva nodului părinte.

Când utilizatorul face clic pe butonul marcat cu "+" iar nodul părinte se desfășoară, nodul copil fals se șterge și în schimb se creează cele reale obținute prin scanarea registrului (a se vedea metoda ShowSubKeys).

Vom furniza nodurile cu imagini. Pentru aceasta, în componenta imageList1, plasăm imagini corespunzătoare dosarelor deschise și închise. Rețineți că pentru desenarea și schimbarea imaginilor există evenimente speciale - OnGetlmageIndex și OnGetSelectedIndex. În acest exemplu, aceste două evenimente au un singur manipulator: hărțile folderul deschis la nodul extins, iar cel colaps - la cel închis.

În concluzie, trebuie să spunem despre trăsătura foarte importantă a componentei TListview. Atunci când afișează o cantitate mare de informații, procesarea datelor poate dura foarte mult timp și poate dura prea multă memorie. Rezultatul este traducerea listei într-un așa-numit mod virtual. Se folosește când există prea multe elemente din listă și nu pot fi stocate acolo din motive de timp sau de memorie. Ieșirea este simplă:

1. Traducem componenta in modul virtual prin setarea proprietatii OwnerData la True.

2. Spuneți lista câte elemente ar trebui să existe în articole prin setarea elementelor necesare. Valoarea valorii.

3. Pentru a furniza datele necesare, programatorul ar trebui să prevadă pentru manipularea evenimentelor OnData, OnDataFind, OnDataHint și OnDataStateChange. Cel puțin trebuie să descrieți procedura de tratare a evenimentului OnData.

TLVOwnerDataEvent = procedura (expeditor: TCbject; element: TListltem) de obiect;

Ați trecut un obiect TListitem și în interiorul procesatorului de evenimente OnData trebuie să îl "desenați" dinamic - complet, de la antet la imagini.

Acest eveniment are loc înainte de fiecare redirecționare a listei. Deci, dacă colectarea datelor pentru lista dvs. durează mai mult sau mai puțin timp, este mai bine să nu le conectați la evenimentul OnData - redesenarea va fi întârziată foarte mult. În plus, în modul virtual, lista nu poate fi sortată.

Borland face ca Delphi 7 să fie un exemplu excelent pentru lista virtuală de mai sus. Îi trimitem cititorului interesat.

Răspunsuri la întrebări cu privire la componenta TListview pot fi găsite în două locuri: „nativ“ d7vcl.hlp fișier de ajutor și Windows Win32.hip fișier de ajutor. Al doilea conține informații sub forma unei descrieri a mesajelor trimise în fereastra Listview și a macrocomenzilor corespunzătoare. Unele dintre acestea vă permit să extindeți funcționalitatea componentei TListview. Aceste macrocomenzi sunt conținute în fișierul CommCtrl.pas.








Trimiteți-le prietenilor: