...

Листинг 7.25.

Составление списка дочерних разделов

procedure TForm1.keysExpanding(Sender: TObject; Node: TTreeNode;

var AllowExpansion: Boolean);

var

reg: TRegistry;

subkeys: TStrings;

i: Integer;

begin

if Integer(Node.getFirstChild.Data) <> -1 then

//Список подразделов был зачитан ранее

Exit;

Node.DeleteChildren(); //Удаление фиктивного элемента дерева

reg := TRegistry.Create();

//Загрузка списка подразделов выбранного раздела

reg.RootKey := GetRootKey(Node);

if reg.OpenKey(GetKeyPath(Node), False) then

begin

//Получение списка подразделов

subkeys := TStringList.Create();

reg.GetKeyNames(subkeys);

for i := 0 to subkeys.Count – 1 do

begin

//Добавление элемента для дочернего раздела (не забываем

//проверять подразделы у каждого дочернего раздела)

CheckSubKeys(keys.Items.AddChild(Node, subkeys[i]));

end;

subkeys.Free();

reg.CloseKey();

end;

reg.Free();

end;

В листинге 7.25 используются две дополнительные функции: для определения полного пути раздела, соответствующего элементу дерева (без имени ко рневого раздела), и для получения дескриптора корневого раздела (хранится в пoлeData корневого элемента каждой ветви дерева).

Путь раздела определить несложно: просто поднимаемся к корню соответствующей верви дерева, собирая по ходу имена элементов дерева (листинг 7.26).

Загрузка...