Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XML vs TreeView [D7, XP]


Страницы:   1 2

trsteep ©   (2009-02-04 22:45:00) 

Пытаюсь по клику на ноде TreeView загрузить дополнительные параметры.
Тут же вопрос какое событие срабатывает только при клике на нод, а не просто клик?

В дереве существуют папки и конечные объекты
Конечные объекты содержат Название самого надо, название и версию

...
TProgram = class
   Folder          : Boolean;  //Папка?
   Name,                       //Название В дереве и нода
   ver             : String;   //Версия
end;
....

Считываем каждый нод, добавляем его в TreeView
....
var ProgramData: TProgram;
.....
try
       ProgramData := TProgram.Create;
       tmpTreeNode := TreeNodes.AddChild( TreeNode , tmpNode.NodeName );
       //Какие параметры вносим?
       if tmpNode.Attributes['Folder']=false then
       begin //Заполняем параметры
         ProgramData.Folder := false;
         ProgramData.FullName := tmpNode.Attributes['FullName'];
         ProgramData.ver := tmpNode.Attributes['Version'];
         ProgramData.LicenceType := tmpNode.Attributes['LicenceType'];
         ProgramData.Comment := tmpNode.Attributes['Comment'];
         ProgramData.Default := tmpNode.Attributes['Default'];
         ProgramData.PathToProgram := tmpNode.Attributes['PathToProgram'];
         ProgramData.WWW := tmpNode.Attributes['WWW'];
         ProgramData.PathToInstall := tmpNode.Attributes['PathToInstall'];
         ProgramData.InstallScript := tmpNode.Attributes['InstallScript'];
       end
       else ProgramData.Folder := true;
       //Переносим параметры
       tmpTreeNode.Data := ProgramData;
     finally
       //Очищяем
       ProgramData.Free;
     end;
....

как потом при клике загрузить?
пробовал:
try
   ProgramData := TProgram.Create;
   if ProgramData( TreeView.Selected.Data ).Folder=false then
   begin
     Showmessage( TreeView.Selected.Text +#13
                  {+ ProgramData(TreeView.Selected.Data).FullName}
                 );
   end;
 finally
   ProgramData.Free;
 end;

Не компилит: [Pascal Warning] UnitMain.pas(149): W1036 Variable 'ProgramData' might not have been initialized

если использовать TProgram(TreeView.Selected.Data ).Folder;
вылетает с ошибкой,...

Как правильно читать?


Johnmen   (2009-02-06 15:03:00) [1]


> девушка   (06.02.09 14:58) [26]

Ага, не переменная, а вычисленная константа. А не тип. В данном контексте.


девушка   (2009-02-06 14:58:00) [2]

Я бы на месте компилятора тоже не приняла бы эту строчку:

if ProgramData( TreeView.Selected.Data ).Folder=false

if TprogramData(...).Folder=false <--- тип, а не переменная, (непереводимая игра слов)


Amoeba   (2009-02-05 23:59:00) [3]


> TRSteep ©   (05.02.09 22:44) [24]
>
>
> > А нечего загружать-то, ничего уже нету, ведь ProgramData.
>
> > Free;
>
> а когда tmpTreeNode.Data := ProgramData;
> разве у Нода в Data не сохраняется?

С какой стати? После
ProgramData.Free;
tmpTreeNode.Data указывает неизвестно на что. Пора бы знать базовые элементарные вещи.


TRSteep   (2009-02-05 22:44:00) [4]


> А нечего загружать-то, ничего уже нету, ведь ProgramData.
> Free;

а когда tmpTreeNode.Data := ProgramData;
разве у Нода в Data не сохраняется?


Johnmen   (2009-02-05 21:27:00) [5]


> как потом при клике загрузить?

А нечего загружать-то, ничего уже нету, ведь ProgramData.Free;
:)


TRSteep   (2009-02-05 20:12:00) [6]

я не совсем понимаю - но вот:....

...
TProgram = class //создаем класс
  Folder          : Boolean;  //проверяем это Папка?
  Name,                       //Название В дереве и нода
  ver             : String;   //Версия программы
end;
....
Считываем каждый нод, добавляем его в TreeView
....
var ProgramData: TProgram;
.....
try
      ProgramData := TProgram.Create; //незнаю как называется но так надо для классов :)
      tmpTreeNode := TreeNodes.AddChild( TreeNode , tmpNode.NodeName ); //добавляем потомка и берем его для внесения параметров
      //Какие параметры вносим?
      if tmpNode.Attributes['Folder']=false then //если потомок имеет атрибут папка - фолсе - т.е. это конечный лист
      begin //Заполняем параметры класса
        ProgramData.Folder := false; //не папка
        ProgramData.FullName := tmpNode.Attributes['FullName']; //заносим имя
        ProgramData.ver := tmpNode.Attributes['Version'];// заносим версию
      end
      else ProgramData.Folder := true; //если папка пишет папка тру
      //Переносим параметры класса в дату нода
      tmpTreeNode.Data := ProgramData;
    finally
      //Очищяем
      ProgramData.Free;
    end;
....
как потом при клике загрузить?
пробовал:
try
  ProgramData := TProgram.Create;//опять таки для классов надо
  if ProgramData( TreeView.Selected.Data ).Folder=false then//если это не папка
  begin //показываем сообщение  где выводим имя, которое содержится в дате нода, это для тестирование - смогу вывести имя -) смогу занести имя в TEdit, пока закоментировал, потомучто не компилецо....
    Showmessage( TreeView.Selected.Text +#13
                 {+ ProgramData(TreeView.Selected.Data).FullName}
                );
  end;
finally
  ProgramData.Free;// очищаем
end;


Palladin   (2009-02-05 19:30:00) [7]


> TRSteep ©   (05.02.09 19:00) [20]

Логика ясна, и то что ты сделать хочешь, тоже понятно, тебя не об этом просят. Тебя просят код, строчку за строчкой, прокомментируй, что ты делаешь в каждой строке?


TRSteep   (2009-02-05 19:00:00) [8]

логика ProgramData имеет поле folder, но как ему передать выделенный объект?
пока додумал только до такого....
потомучто в книге про data только одна строчка текста....
в примере что нашел по TTreeNode.Data была только запись, чтение не нашел - вот пытаюсь реализовать.
Знаний ровно столько сколько дали в универе + читаю книгу Архангельского.
но то что прочитаешь не вбивается в голову пока на практике не примениш. вот пытаюсь применить...


Palladin   (2009-02-05 18:44:00) [9]

Хотя судя по тому, что ты тупо не можешь прокомментировать свои действия, как тебя просит Плохиш, то этот кусок кода пришел к тебе свыше и ты по наитию божьему его употребил. А объяснить не можешь.


Palladin   (2009-02-05 18:42:00) [10]

Неужели сложно изучить раздел Type Casting документации. Или хотя бы поискать в гугле на тему "приведение типов (delphi|pascal)"

ведь "ProgramData( TreeView.Selected.Data ).Folder" ты ж с какого то хрена написал... или сам придумал?


TRSteep   (2009-02-05 18:41:00) [11]

неужели сложно дать одну строчку кода или ссылку на статью где можно прочитать про то как работать с атрибутом Data у нода, а лучше про все дерево


Плохиш   (2009-02-05 18:10:00) [12]

Я просил прокомментировать каждое слово в твоей писульке с надеждой, что ты сам поймёшь. Но, видно, не судьба.


TRSteep   (2009-02-05 18:04:00) [13]

я хочу прочитать значение Folder из класса TProgram, у выделенного TTreeNode из атрибута (или как правильно будет не знаю) Data.


Плохиш   (2009-02-05 17:47:00) [14]


> TRSteep ©   (05.02.09 17:07) [13]
>
>
> > на строчке if ProgramData( TreeView.Selected.Data ).Folder=false>
> >[Pascal Error] UnitMain.pas(162): E2066 Missing operator
> > or semicolon
>
> так где можно посмотреть как правильно написать?

Это ты чаво здеся написал? Давай рассказывай по словам, по буквам, что зачем и почему и что ждёшь от этой строчки.


TRSteep   (2009-02-05 17:07:00) [15]


> на строчке if ProgramData( TreeView.Selected.Data ).Folder=false>
>[Pascal Error] UnitMain.pas(162): E2066 Missing operator
> or semicolon

так где можно посмотреть как правильно написать?


TRSteep   (2009-02-05 14:40:00) [16]


> Не ври, это не дистриб, а мусор с соседней пиратской помойки.

такой прислали когда раздавали триалки 2009го...
он пощемуто поцарапан чуток.....


Плохиш   (2009-02-05 13:58:00) [17]


> прислали такой дистриб....

Не ври, это не дистриб, а мусор с соседней пиратской помойки.


TRSteep   (2009-02-05 13:52:00) [18]


> Тебе перевести или сам словарь достанешь?

А как узнать какой оператор нужен?


> Как ты так лопухнулся?

прислали такой дистриб....


Anatoly Podgoretsky   (2009-02-05 13:41:00) [19]

> TRSteep  (05.02.2009 13:38:08)  [8]

Как ты так лопухнулся?


TRSteep   (2009-02-05 13:38:00) [20]


> ЮЮ ©

Спасибо. У меня справки нет по делфи... только MSDN


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо