Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

376

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

357

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

215

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

125


ID: 400669

epimkin

Профессионал

111


ID: 242862

Hunter7007

Мастер-Эксперт

29

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

25

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-20 22:46:01-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 160194

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: ~S t e e p~
Дата: 11.02.2009, 13:59 Консультация закрыта
Поступило ответов: 0

Здравствуйте!
Я пытаюсь реализовать чтение из XML с сохранением структуры с TreeView, при этом сохраняя дополнительную информацию в TreeNode.Data

Не могу попять как сделать чтобы при клике нода информация грузилась в TMemo например.
Как я понимаю 2 варианта: 1. составление таблицы соответствия - и грузить информацию из XML непосредственно, 2 грузить иформацию в память вместе с TTreeNode в его поле Data. Но с памятью не работал еще....
Существую 2 типа: 1. Что-то вроде папки - хранит другие объекты - или пустая. 2. Конечные объекты - хранят информацию
Вот попытки что-то сделать:

Код
type
  TProgram = record //class
    Folder          : Boolean;  //Папка?
    Name,                       //Название В дереве и нода
    FullName,                   //Наименование программы
    ver             : String;   //Версия
  end;
PProgram = ^TProgram;
var
  ProgramInfo : PProgram;
......
//Загрузка веток и листов
Procedure TFrm_Main.GetChileds(XMLNode: IXMLNode; TreeNodes: TTreeNodes; TreeNode: TTreeNode );
var
  i: integer;
  tmpNode    : IXMLNode;
  tmpTreeNode: TTreeNode;
  //ProgramData: TProgram;
begin
  for i:=0 to XMLNode.ChildNodes.Count - 1 do
  begin
    tmpNode := XMLNode.ChildNodes[i];
    if tmpNode.ChildNodes.Count>0
    then begin
      GetChileds( tmpNode,
                  TreeNodes,
                  TreeNodes.AddChild( TreeNode , tmpNode.NodeName ) );
    end
    else
    begin
      //ProgramInfo := TProgram.Create;
      //Операции над добавленным потомком
      tmpTreeNode := TreeNodes.AddChild( TreeNode , tmpNode.NodeName );
      //Переносим параметры
      New(ProgramInfo);
      tmpTreeNode.Data := ProgramInfo;
      //Какие параметры вносим?
      if tmpNode.Attributes['Folder']=false then
      begin //Заполняем параметры
        ProgramInfo^.Folder := false;
        ProgramInfo^.FullName := tmpNode.Attributes['FullName'];
        ProgramInfo^.ver := tmpNode.Attributes['Version'];
      end
      else ProgramInfo.Folder := true;
    end; //Есть, нет детей
  end; //Цикл добавление нодов
end;
//При операции ProgramInfo^.Folder := false; вылетает с ошибкой Project ... raised exception class EAccessViolation with message 'Access violation at address 00404934 in module .... Rad address 000000004'
...........
//Начало работы
var
  FirstNode: IXMLNode;
  TreeNodes: TTreeNodes;
  FirstTreeNode: TTreeNode;
begin
  XMLDocument.Active;
  //Подготовка загрзки
  TreeView.Items.Clear;
  FirstNode := XMLDocument.ChildNodes.Get(1);
  TreeNodes := TreeView.Items;
  FirstTreeNode := TreeView.Items.AddChild(TreeView.TopItem, FirstNode.NodeName);
  //Загрузка
  GetChileds(FirstNode, TreeNodes, FirstTreeNode);
  //Фокус и загрузка выделенного
  TreeView.Items.Item[0].Selected := true;
.............
//Действия при клике 
procedure TFrm_Main.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
  TreeClickNode.Execute; //В этой процедуре должны грузится данные в Memo например
end;
//С сохранением еще не разбирался....


Очень буду рад предложению решения проблемы. Информацию по памяти (желательно по конкретному случаю)
Информацию как сделать проще, лучше

Приложение:

Ответов пока не поступило
Мини-форум консультации # 160194
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 215

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 164

Gluck

8-й класс

Рейтинг: 60

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0