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;
вылетает с ошибкой,...

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


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


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


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


ЮЮ   (2009-02-05 12:40:00) [22]


> какое событие срабатывает только при клике на нод, а не
> просто клик?

Если при таком клике удалось сменить нод, то OnChange, естественно. А если попали по свернуть/развернуть - то OnCollapsed / OnExpanded

А если нажать F1, то и про остальные 13 можно прочесь.


TRSteep   (2009-02-05 12:13:00) [23]


> На какой строке кода при работе под отладчиком?

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


> P.S. И кстати при чём тут XML?

Ну загржаем с xml, потом надо же сохранить в xml. может есть проще способы...


> Free здесь лишнее.

спасибо.

еще не подскажите насчет:
какое событие срабатывает только при клике на нод, а не просто клик?


anonims   (2009-02-05 09:08:00) [24]

//Переносим параметры
      tmpTreeNode.Data := ProgramData;
    finally
      //Очищяем
      ProgramData.Free;

в результате имеем в Data ссылку на уничтоженный (Free) объект

Free здесь лишнее.


Amoeba   (2009-02-05 03:46:00) [25]


> [Pascal Warning] UnitMain.pas(149): W1036 Variable 'ProgramData'
> might not have been initialized
>

Поставьте ProgramData := TProgram.Create; перед try, и все будет путем. Именно на это и намекает компилятор.


Германн   (2009-02-05 01:06:00) [26]


> Не компилит: [Pascal Warning]

Warning это всего лишь предупреждение, что возможно алгоритм недостаточно продуман и в рантайме в будущем возможно появление "непонятных" ошибок. Компиляция при этом походит нормально.

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

С КАКОЙ/B> ошибкой? На какой строке кода при работе под отладчиком?
Ей-богу надоело! Неужели нельзя задать вопрос нормально?

P.S. И кстати при чём тут XML?


TRSteep   (2009-02-04 22:58:00) [27]

Нодов планируется около 100-1000.
возможно есть более хороший способ - буду рад услышать ;)

Спасибо заранее за ответ!


Страницы:   1 2

Наверх

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