Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

XML vs TreeView   Найти похожие ветки 

 
trsteep ©   (2009-02-04 22:45) [0]

Пытаюсь по клику на ноде 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;
вылетает с ошибкой,...

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


 
TRSteep ©   (2009-02-04 22:58) [1]

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

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


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


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

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

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

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

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


 
Amoeba ©   (2009-02-05 03:46) [3]


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

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


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

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

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

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


 
TRSteep ©   (2009-02-05 12:13) [5]


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

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


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

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


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

спасибо.

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


 
ЮЮ ©   (2009-02-05 12:40) [6]


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

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

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


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


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


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


 
TRSteep ©   (2009-02-05 13:38) [8]


> ЮЮ ©

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


 
Anatoly Podgoretsky ©   (2009-02-05 13:41) [9]

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

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


 
TRSteep ©   (2009-02-05 13:52) [10]


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

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


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

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


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


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

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


 
TRSteep ©   (2009-02-05 14:40) [12]


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

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


 
TRSteep ©   (2009-02-05 17:07) [13]


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

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


 
Плохиш ©   (2009-02-05 17:47) [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 18:04) [15]

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


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

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


 
TRSteep ©   (2009-02-05 18:41) [17]

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


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

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

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


 
Palladin ©   (2009-02-05 18:44) [19]

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


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

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


 
Palladin ©   (2009-02-05 19:30) [21]


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

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


 
TRSteep ©   (2009-02-05 20:12) [22]

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

...
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;


 
Johnmen ©   (2009-02-05 21:27) [23]


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

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


 
TRSteep ©   (2009-02-05 22:44) [24]


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

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


 
Amoeba ©   (2009-02-05 23:59) [25]


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

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


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

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

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

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


 
Johnmen ©   (2009-02-06 15:03) [27]


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.108 c
4-1206779666
kalexi
2008-03-29 11:34
2009.03.29
Как узнать с какого по какой адрес занимает процесс в системе?


15-1232646153
AlexDan
2009-01-22 20:42
2009.03.29
Простые числа и пятница.


15-1232442288
123-ий
2009-01-20 12:04
2009.03.29
Delphi + PostgreSQL 8.3


2-1233741002
AlexDan
2009-02-04 12:50
2009.03.29
О операторе if


15-1232680784
Slider007
2009-01-23 06:19
2009.03.29
С днем рождения ! 23 января 2009 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский