Komponensek és ttreeview tlistview - 5. fejezet

TTreeView komponens úgynevezett fa (ábra. 5.3).

TTreeView komponens - az utódja TOutiine komponensek tervezett Delphi Borland van 1, és úgy tervezték, hogy hierarchikus megjelenítésére adatokat. Ő a „szív” tulajdona

vagyontárgyak: TTreeNodes;

Ábra. 5.3. Megjelenése TTreeView alkatrész

Ez a tulajdonság - egy listát az összes fa csomópontjait, a lista, amely a további jótékony hatása van. Mind a terméket a listában - ez egy objektum típusú TTreeNode. A tulajdonságai táblázatban mutatjuk be. 5.3.

5.3 táblázat. A lista objektum tulajdonságait TTreeNode

Elem a listában jelennek meg több oszlopot egymás alatt. Az első tartalmazza kis ikon és felirat, a többi - néhány információt a programozó. Ha ShowColumnHeaders tulajdonság értéke True értéket szállított oszlopfejléceim

Akárcsak az előző komponens, a lista elemei az elemek tulajdonság. Ez az aktuális listát; semmi szokatlan, módszerek kivételével a hozzáadni / eltávolítani, nincs ott. Minden eleme a lista (TListitem objektum) viszont hasonló a TTreeNode komponenst. De ez is egy fontos különbség - akkor válhat hordozó nagy mennyiségű további információt. Amellett, hogy a Data ingatlan is van vagyona

ingatlan Subltems: TStrings;

Ezzel a funkcióval a lista egyes elemeire lehet vonni egy sor húrok és tárgyakat. De ezek a vonalak jelzik a felhasználó?

Ezeket szerint az irányítást a fejlesztők, a kijelzőn megjelenik mód vsReport. Először hozza létre a szükséges számú oszlop fejléceket (Töltsd az oszlopok tulajdon), tekintettel arra, hogy az első kapja a tényleges szöveget listatétel (feliratot tulajdonság). Kövesse ugyanabban az oszlopban jelenik sornyi szöveg tulajdonságainak elemek. Subltems (ábra. 5.5).

Ábra. 5.5. Így kerül az alkatrész információ TListView vsReport mód

Elem a listában lehet válogatni - a felelős ezért SortType tulajdonság. Akkor nem csak rendezi az elemeket neve (ez lehetséges, olyan értéken SortType egyenlő stText), hanem az adatok (értékek és stData stBoth), ahogy az a segédprogram Explorer. Hogy végre ilyen minősítés szükséges események feldolgozását OnColumnClick És OnComparel

var ColNum. integer;

eljárás TMainForm.ListViewlColumnClick (Sender: TObject; oszlop:

eljárás TMainForm.ListViewlCompare (Sender: TObject; Iteml, ITEM2:

TListltem; Adatok: egész; var összehasonlítása: Egész szám);

ha ColNum = 0, akkor // Cím

Összehasonlítás: = CompareStr (Iteml.Caption, ITEM2 .Caption);

Item2 .Subltems [ColNum-1]); végén;

Vegyük példaként a komponensek alkalmazása és TTreeview TListview. Amennyiben a közös használatra hasznos lenne? Úgy döntünk, hogy nem a térképező rendszer regisztrációs adatait. Egyrészt, a másik kulcs hierarchikusan. Másrészt, ezek mindegyike képes több

különböző értékeket. Így már szinte jön, hogy ugyanazt a döntést, mint a fejlesztők a Microsoft, létrehozta a közüzemi Registry Editor - billentyűk bal fa, jobbra - kibővített listája azok tartalmát.

5.6 ábra. Függelék Mini-nyilvántartó böngésző Itt a forráskód:

Listing 5.1. Függelék Mini-Registry-böngésző, a fő modul

Ablakok, üzenetek, SysUtils, osztályok, grafika, vezérlők, Forms, párbeszédablakok,

StdCtrls, rácsok, Vázlat ComCtrls, ImgList, ExtCtrls;

eljárás FormCreate (Sender: TObject);

eljárás TreeViewlChange (Sender: TObject; Node: TTreeNode);

eljárás FormDestroy (Sender: TObject);

eljárás TreeViewlExpanded (Sender: TObject; Node: TTreeNode);

eljárás TreeViewlGetlmagelndex (Sender: TObject; Node: TTreeNode);

eljárás ShowSubKeys (ParentNode: TTreeNode; mélység: Egész szám);

funkció GetFullNodeName (Node: TTreeNode): string;

ha az expandált majd Imagelndex: = 2

mást Imagelndex: = 3;

Együttműködik a rendszerleíró adatbázis segítségével VCL TRegistry tárgy átfogja mind jól tervezett ez a Windows API függvények. A OnCreate eseménykezelő a fő formája jön létre Reg objektumot, valamint a két fejléc (Oszlopok tulajdonság) adunk Listview1 listát.

Magyarázatok elve megköveteli megépítésének fa gombok. Először is, ez az alkalmazás csak akkor jelenik meg a rendszer egyik kulcsok (nevezetesen HKEY_LOCAL_MACHINE); azt lehet cserélni, vagy adjunk másoknak, ha akarja. Másodszor, egy kísérlet, hogy építeni az összes „ágas” gombok fa csak túl sokáig tart, és valószínűleg nem fog tetszeni a felhasználók. Emlékezzünk, mert Registry Editor segédprogram működik elég gyors. Ezért meg kell építeni egy fa dinamikusan - hozzon létre és azt mutatják, a gyermek csomópontok idején telepítését a szülő csomópont. Ez az esemény-OnExpand treeview1 komponenst.

Nézzük meg egy pillanatra. Egy jel, amit csomópontok maximalizálja gombot (jelölt „+”), mert a szülő csomópont nincs gyermeke? A kiút - idején az építkezés egy kulcs ellenőrzés, vannak-e gyerekek. Ha igen, akkor egy (fiktív) üres kulcsot adunk hozzá. Az egyetlen szerep -, hogy a rendszer „+” ellen a szülő csomópont.

Amikor a felhasználó rákattint a gombra jelölt „+” és a szülő csomópont van beállítva, dummy gyermek csomópont eltávolították, és helyébe valódi csomópontok, amelyekben eredetileg a nyilvántartásban (lásd. ShowSubKeys módszer).

Mi felvértezzük egységek képeket. Ehhez imageList1 alkatrész mutatnak megfelelő képet a nyitott és a zárt mappákat. Emlékezzünk vissza, hogy rajzolni, és módosítsa ott egy különleges esemény - OnGetlmageIndex És OnGetSelectedIndex. Ebben a példában a két esemény egy felvezető: nyílt terepen, ez megegyezik a képet nyitott mappák és összeomlás - zárt.

Összefoglalva, meg kell mondani, körülbelül egy nagyon fontos jellemzője TListview komponenst. Amikor megjelenik egy bőséges információt, adatfeldolgozás eltarthat egy nagyon-nagyon hosszú idő, és foglalnak túl sok memóriát. Kilépés - lefordítani a listát az úgynevezett virtuális módban. Ez vonatkozik azokra az esetekre, amikor a terméket a listában túl sok, és lehetetlen, hogy tartsa őket ott takarékossági okokból az idő vagy a memória. A megoldás egyszerű:

1. Fordítás komponens virtuális módban tulajdonságok beállításával OwnerData a valódi érték.

2. tájékoztatja a listán, ahogy lennie kell elemei a kívánt hosszúságú items.Count.

3. Annak érdekében, hogy a szükséges adatokat, a programozónak kell biztosítani a kezeléshez események OnData, OnDataFind, OnDataHint és OnDataStateChange. Legalább meg kell leírni az eseménykezelő OnData.

TLVOwnerDataEvent = eljárás (Sender: TCbject; pont: TListltem) objektum;

Átadtál TListitem objektum belsejében egy eseménykezelő dinamikusan OnData „hivatalossá”, hogy - teljes egészében, a címet a képeket.

Ez az esemény bekövetkezik, mielőtt minden újrarajzoláskor a listán. Tehát, ha az adatgyűjtés a listát tart egy többé-kevésbé hosszú ideig, akkor jobb, ha nem kapcsolja azt az eseményt OnData - újrarajzoláskor jelentős késedelmet szenvedett. Ezen túlmenően, a virtuális módban a lista rendezéséhez lehetetlen.

Borland Delphi 7 teszi a bírság például a fenti - Virtuális listanézeti. Számára és utalja az érdeklődő olvasó.

Válaszok a kérdésre TListview elem megtalálható két helyen: „natív” d7vcl.hlp súgó fájlt, és a Windows Win32.hip súgó fájlt. A második, amely információkat tartalmaz egy leírást a küldött üzenetek az ablak listanézeti osztály, és azok a makrók. Némelyikük lehetővé teszi, hogy kiterjeszti a funkcionalitást TListview komponenst. Ezek a makrók tartalmazza CommCtrl.pas fájlt.