Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VirtualStringTree помогите с загруской, с ini и сохранением в обратном порядке 
:(
    Опции темы
Sanchezzz
Дата 6.12.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 5
Всего: 60



Помогите реализовать загрузку дерева данными сохранения их..
данные такие.

Код

type
 PitemsNode=^TitemsNode;
   TitemsNode= record
  Dsc,        //описание
  EMail,      
  Name,       //имя
  tip: string;//тип група или запись
  CroupInc:integer; //номер узла 
  Enabled, Editable: Boolean;
  ImageIndex: Integer;//номер картинки
  end;


VirtualStringTree создаю колонки с именами заголовков Name, EMail, Dsc, tip


данные гружу из ini файла такого содержания для групп я сделал 
[0]
Dsc=
Name=группа 1
ImageIndex=-1
[1]
Dsc=
Name=группа 2
ImageIndex=-1
итд.

гружу так.
Код

public
procedure GROUPLoadFromFile(pFilename: string);


procedure TForm1.GROUPLoadFromFile(pFilename: string);
var
  t_ini: TIniFile;
  i: Integer;
  t_strs: TStringList;
  t_section: string;
  t_nodedate: PitemsNode;
  t_node: PVirtualNode;

begin
    t_ini := TIniFile.Create(pFilename);
    t_strs := TStringList.Create;
    try
      t_ini.ReadSections(t_strs);//считываем все секцие
      for i := 0 to t_strs.Count - 1 do
      begin
        t_section := IntToStr(i);номер секцие
       Form1.MRAVS.BeginUpdate;
       t_node := VS.AddChild(nil);
       t_nodedate:= VS.GetNodeData(t_node);
       if Assigned(t_nodedate) then
        with t_nodedate^ do
    begin
       t_nodedate.NameNick:=t_ini.Readstring(t_section, 'Name', 'Plaise_Rename_Group'+inttostr(i));
       t_nodedate.Dsc:=t_ini.Readstring(t_section, 'Dsc', 'Description'+inttostr(i));
       t_nodedate.EMail:='';
       t_nodedate.tip:='Group';//это тип группа или запись
       t_nodedate.CroupInc:=i;
       t_nodedate.ImageIndex:= -1;
          end;
       VS.EndUpdate;
         end;
    finally
      FreeAndNil(t_ini);
      FreeAndNil(t_strs);
    end;
end;
---

далее сама проблема для меня 
есть еoе один ini файл который нужно грузить после загрузки групп.
примерно такого содержания
[0]
name=петя
[email protected]
Dsc=описания
Group=группа 1 ; в какой групе 
[1]
итд...

в общем мне нужно загрузить в группы из ini файла данные вот такого содержания нужно чтоб получилось

-группа 1
  |-петя
  |-редиска
+группа 2
-группа 3
  |-Алексей




--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
AriX
Дата 6.12.2007, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



В соседнем топике почти такая же проблема, http://forum.vingrad.ru/forum/topic-185601.html#
PM MAIL   Вверх
Sanchezzz
Дата 6.12.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 5
Всего: 60



совсем другая.. ему нужно древо каталогов получить. мне загрузить еще один список по группам.
и сохранить. если это данные а не группа.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Pavelbej
Дата 6.12.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Ну так добавь имя групы, а потом из той же секции добавь нужные данные в дочерние узлы:

Код

  Node1:=VT.AddChild(VT.FocusedNode);
  Date := VT.GetNodeData(Node1);
  if Assigned(Date) then
    with Date^ do
                begin
                    Group:=Ее имя;   //Добавляешь имя групы
                end;
   //Дальше уже добавляеш Петю...
   node2:=VT.AddChild(node1);
   ...   


Если не правильно понял проблему, прошу простить.
PM MAIL   Вверх
AriX
Дата 7.12.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: 5
Всего: 19



Sanchezzz
Совершенно тот же алгоритм по получению нода, когда известен путь до него.
PM MAIL   Вверх
Sanchezzz
Дата 8.12.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 5
Всего: 60



я вроде все хорошо расписал выше. ладно заход номер 2.
после того как загрузятся группы мне нужно загрузить из другого ини файла дынные. 
вот такого содержания 
[0]
name=петя
[email protected]
Dsc=описания
Group=группа 1 ; в какой групе// это имя куда нужно вставить нод.


как найти в списке древа по имени name узел и получить индекс или указатель 
чтоб можно было добавить в него свой нод данных.
VT.FocusedNode не подходит.



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Pavelbej
Дата 9.12.2007, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Вот как я сделал. Не совсем красиво, но работает:


Код

function TForm1.FindNodeSelect(ANode: PVirtualNode; const APattern: WideString): PVirtualNode;
var
    NextNode: PVirtualNode;
    PhoneNode: PLinksCollector;
begin
    Result := nil;
    NextNode := ANode.FirstChild;
    if Assigned(NextNode) then
      repeat
        PhoneNode := VTCateg.GetNodeData(NextNode);
        if Assigned(PhoneNode) then
          if PhoneNode^.Category = APattern then
            begin
              Result := NextNode;
              Exit;
            end;
        Result := FindNodeSelect(NextNode, APattern);

        NextNode := NextNode.NextSibling;
      until  NextNode = nil;
end;


Код

var data: string;
      str: TStrings;
      FoundNode: PVirtualNode;
begin
...
   if Path<>'' then    // Это заранее сохраненный путь из VTCateg.Path(node,0, ttnormal,'\')
   //Например у нас в Path есть путь Categories\Music\Rock\Nickelback\
    begin
       str:=TStringList.Create;
       data:='';
       try
       for i:=1 to length(Path) do  //Начинаем читать путь и в список добавляем отдельно каждое имя
        if Path[i]<>'\' then
           data:=data+Path[i]
        else
           begin
            str.Add(data);
            data:='';
           end;
       if VTCateg.RootNodeCount > 0 then
        begin
          FoundNode:=VTCateg.RootNode;    //Присваиваем  FoundNode -    RootNode
          for y:=1 to str.Count-1 do        //Так как первое имя из списка и есть  RootNode,
                                                           //начинаем читать со второго     
            begin
              data:=(str[y]);   // Теперь получаем из списка, имена по очереди
              FoundNode := FindNodeSelect(FoundNode, data);   // Если нашли, то выделяем, раскрываем...
              if Assigned(FoundNode) then                                    // И так до последнего
                begin
                    VTCateg.Selected[FoundNode] := True;
                    VTCateg.FocusedNode:=FoundNode;
                    VTCateg.Expanded[FoundNode]:=true;
                end;
            end;
        end;
       finally
          str.Free;
       end;
    end;


Надеюсь поможет? Или снова не то?

Это сообщение отредактировал(а) Pavelbej - 9.12.2007, 01:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.