![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XML vs TreeView [D7, XP]
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