![]() |
| ||
|
|
Новости |
Поиск |
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;
вылетает с ошибкой,...
Как правильно читать?
Плохиш (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.
возможно есть более хороший способ - буду рад услышать ;)
Спасибо заранее за ответ!