Компоненты TTreeView и TListView
Рассмотрим пример использования компонентов TTreeview и TListview. Где их совместное применение будет полезным? Выберем для этого отображение данных системного реестра. С одной стороны, ключи в реестре упорядочены иерархически. С другой, каждый из них может иметь несколько разнотипных значений. Таким образом, мы почти пришли к тому же решению, что и разработчики из Microsoft, создавшие утилиту Registry Editor – слева дерево ключей, справа – расширенный список их содержимого.
Конечно, нет смысла дублировать их труд. Здесь мы ограничимся только просмотром реестра, затратив на это совсем немного усилий – четыре компонента и пару десятков строк кода. Так выглядит главная (и единственная) форма приложения Mini-Registry browser (рис. 5.6).
Рис. 5.6. Приложение Mini-Registry browser А вот и весь его исходный код:
Листинг 5.1. Приложение Mini-Registry-browser, главный модуль.
unit main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs, Grids, Outline, ComCTRLs, ImgList, ExtCTRLs; type TForml = class(TForm) TreeViewl: TTreeView; ListViewl: TListView; ImageListl: TImageList; Splitterl: TSplitter; procedure FormCreate(Sender: TObject); procedure TreeViewlChange(Sender: TObject; Node: TTreeNode); procedure FormDestroy(Sender: TObject); procedure TreeViewlExpanded(Sender: TObject; Node: TTreeNode); procedure TreeViewlGetlmagelndex(Sender: TObject; Node: TTreeNode); private { Private declarations } public { Public declarations } procedure ShowSubKeys(ParentNode: TTreeNode;depth: Integer); function GetFullNodeName(Node: TTreeNode):string; end; var Forml: TForml; implementation uses registry; {$R *.DFM} var reg: TRegistry; procedure TForml.FormCreate(Sender: TObject); var root: TTreeNode; begin Reg: = TRegistry.Create; ListViewl.ViewStyle: = vsReport; with ListViewl do begin with Columns.Add do begin Width: = ListViewl.Width div 3-2; Caption: = 'Name'; end; with Columns.Add do begin Width: = ListViewl.Width div 3*2-2; Caption: = 'Value'; end; end;