На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Загрузка ini-файла в TTreeView
      ExpandedWrap disabled
        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;

      Автор: Dynamic
      Сообщение отредактировано: jack128 -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0208 ]   [ 16 queries used ]   [ Generated: 2.05.24, 03:54 GMT ]