else

Compare := CompareStr(Iteml.Subitems[ColNum-l], Item2.Subitems[ColNum-l});
end;

Рассмотрим пример использования компонентов TTreeview и TListview. Где их совместное применение будет полезным? Выберем для этого отображение данных системного реестра. С одной стороны, ключи в реестре упорядочены иерархически. С другой, каждый из них может иметь несколько разнотипных значений. Таким образом, мы почти пришли к тому же решению, что и разработчики из Microsoft, создавшие утилиту Registry Editor - слева дерево ключей, справа - расширенный список их содержимого.

Конечно, нет смысла дублировать их труд. Здесь мы ограничимся только просмотром реестра, затратив на это совсем немного усилий - четыре компонента и пару десятков строк кода. Так выглядит главная (и единственная) форма приложения Mini-Registry browser (рис. 5.6).

Программирование в Delphi 7

Рис. 5.6. Приложение Mini-Registry browser

А вот и весь его исходный код:

Листингб. 1. Приложение Minî-Registry-browser, главный модуль

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, E)ialogs, 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;
TreeViewl.Items.Clear;
Reg.RootKey := HKEY_L0CAL_l>4ACHINE;
Root := TreeViewl.Items.Add(nil,'HKEY_LOCAL_MACHINE');
TreeViewl. Items .AddChild (root,1 1 ) ;
end;
procedure TForml.FormDestroy(Sender: TObj ect) ;
begin Reg.Free;
end;
function TForml.GetFullNodeName(Node: TTreeNode):string;
var CurNode : TTreeNode;
begin
Result:='';
CurNode :=Node;
while CurNode. Parentonil do begin
Result:= 'V+CurNode.Text + Result;
CurNode := CurNode.Parent;
end;
end;
procedure TForml.TreeViewlChange(Sender: TObject;
Node: TTreeNode);
var s: string;
Keylnfo : TRegKeylnfo;
ValueNames : TStringList;
i : Integer;

DataType : TRegDataType; begin ListViewl.Items.Clear; s:= GetFullNodeName(Node); if not Reg.OpenKeyReadOnly(s) then Exit; Reg.GetKeylnfo(Keylnfo); if Keylnfo.NumValues<=0 then Exit; ValueNames := TStringList.Create; Reg.GetValueNames(ValueNames); for i : = 0 to ValueNames.Count-1 do with ListViewl.Items.Add do begin


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс