Code:

procedure LoadIniToTree(const FName: string; Tree: TTreeView);

var LS, LV: TStrings;

   i, j: integer;

   root: TTreeNode;

   n: string;

   p: PString;

begin

    Tree.Items.Clear;  // очищаем дерево

    with TIniFile.Create(FName) do // пытаемся открыть файл FName

    try

      LS := TStringList.Create;  // список названий секций

      try

        ReadSections(LS);          // читаем все секции в список

        LV := TStringList.Create;   // список пар "имя=значение"

        try

          for i := 0 to LS.Count-1 do   // для всех секций...

          begin

            LV.Clear;                   // подготовим список

            ReadSectionValues(LS[i], LV);  // читаем список пар "имя=значение" для текущей секции

            root := Tree.Items.Add(nil, LS[i]); // добавляем корневой узел (имя текущей секции)

            for j := 0 to LV.Count-1 do    // для всех пар "имя=значение"...

            begin

             n := LV.Names[j];  // выделяем "имя"

 

             // добавляем дочерний по отношению к root узел,

             // в качестве текста исп. "имя"

             // в качестве значения поля Data = "значение"

             New(p);

             p^ := LV.Values[n];

             Tree.Items.AddChildObject(root, n, p);

            end;

          end;

        finally

          LV.Free;

        end;

      finally

        LS.Free;

      end;

    finally

      Free;  // корректно уничтожаем объект TIniFile

    end;

end;

 

// Применение:

 

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);

begin

    if (TreeView1.Selected <> nil) and (TreeView1.Selected.Parent <> nil) then

    begin

       Edit1.Text := TreeView1.Selected.Text;

       Edit2.Text := String(TreeView1.Selected.Data^);

    end else

    begin

      Edit1.Text := '';

      Edit2.Text := '';

    end;

end;

 

// После использования не забыть освободить память, напр. так:

 

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);

begin

if Node.Data <> nil then

   Dispose(PString(Node.Data));

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить