Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.16;
Скачать: CL | DM;

Вниз

Проблема с DATA   Найти похожие ветки 

 
PSPF2003 ©   (2006-06-29 11:28) [0]

День добрый.
Есть вот такая конструкция:

type
 TDescription=class
  Name : String[255];
  Description : TStrings;
  constructor Create;
  destructor Destroy; override;
 end;

constructor TDescription.Create;
begin
 Description := TStringList.Create;
end;

destructor TDescription.Destroy;
begin
 Description.Free;
 inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Node : TTreeNode;
 Opis : TDescription;
begin
 Opis := TDescription.Create;
 Opis.Name := "Name";
 Opis.Description.Add("Description");

 Node  := TTreeNode.Create(TreeView1.Items);
 Node.Data := Opis;
 TreeView1.Items.Add(Node, "Node");
end;

И в следующей процедуре происходит ошибка (Access Violation)

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
 Edit1.Text := TDescription(Node.Data).Name ;
 Memo1.Lines.Assign(TDescription(Node.Data).Description);
end;

Почему не могу понять Если кто знает в чем я ошибся подскажите.


 
Плохиш ©   (2006-06-29 11:31) [1]


Node := TreeView1.Items.Add(nil, "Node");
Node.Data := Opis;


 
Ega23 ©   (2006-06-29 11:32) [2]

Description : TStringList;


 
Плохиш ©   (2006-06-29 11:40) [3]


> Ega23 ©   (29.06.06 11:32) [2]

Неа, он присваивает Data одному TTreeNode, в TreeView создаёт ещё один узел, по типу и на уровне, перед этим созданного. А читать Data пытается вообще не понятно у какого узла.


 
PSPF2003 ©   (2006-06-29 11:44) [4]


> Плохиш ©

А как правильно нужно?


 
Ega23 ©   (2006-06-29 11:45) [5]


> Неа, он присваивает Data одному TTreeNode, в TreeView создаёт
> ещё один узел, по типу и на уровне, перед этим созданного.
>  А читать Data пытается вообще не понятно у какого узла.
>


Здесь как раз, вроде, всё в порядке.
Автор, на какой строке у тебя AV выпадает?


 
Ega23 ©   (2006-06-29 11:46) [6]

Node  := TTreeNode.Create(TreeView1.Items);

Ой... А это что такое????


 
PSPF2003 ©   (2006-06-29 11:46) [7]

На самой первой при присваивании Edit-у текста.


 
Ega23 ©   (2006-06-29 11:47) [8]


> На самой первой при присваивании Edit-у текста.


Чему равно Node.Data?


 
Плохиш ©   (2006-06-29 11:48) [9]


> PSPF2003 ©   (29.06.06 11:44) [4]
>
> > Плохиш ©
>
> А как правильно нужно?

Хочешь чтобы я попугаем стал?

> Ega23 ©   (29.06.06 11:46) [6]

О, увидал :-))


 
PSPF2003 ©   (2006-06-29 11:49) [10]


> Чему равно Node.Data?

Opis ?


 
Плохиш ©   (2006-06-29 11:51) [11]


> PSPF2003 ©   (29.06.06 11:49) [10]
>
> > Чему равно Node.Data?
>
> Opis ?

nil ;-)


 
PSPF2003 ©   (2006-06-29 11:52) [12]

Всем большое пасибо пошел разбиратся в своих баронах...


 
ЮЮ ©   (2006-06-29 11:54) [13]

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if (Node <> nil) and (Node.Data <> nil) then begin
  Edit1.Text := TDescription(Node.Data).Name ;
  Memo1.Lines.Assign(TDescription(Node.Data).Description);
end
else begin
  Edit1.Text := "" ;
  Memo1.Lines.Clear;
end;
end;


 
Ega23 ©   (2006-06-29 11:55) [14]


> О, увидал :-))


Не сразу внимание обратил... Жужос какой-то...


 
PSPF2003 ©   (2006-06-29 11:57) [15]


> Ega23 ©  
> > О, увидал :-))Не сразу внимание обратил... Жужос какой-
> то...

Ты про что ?


 
Плохиш ©   (2006-06-29 12:00) [16]


> PSPF2003 ©   (29.06.06 11:57) [15]
>
> > Ega23 ©  
> > > О, увидал :-))Не сразу внимание обратил... Жужос какой-
>
> > то...
>
> Ты про что ?

Это он про-то, что некоторым лень в справке на "Example" нажать.


 
PSPF2003 ©   (2006-06-29 12:03) [17]


> Это он про-то, что некоторым лень в справке на "Example"
> нажать.

Да нет не лень я если честно про нее и забыл. Все по интернету статьи читал, да книжки умные :)


 
ЮЮ ©   (2006-06-29 12:06) [18]

Ну и что, вставка узла сразу за самим любимым должно AV вызывать? Неужели настолькос cлаба защита в VCL?


 
ЮЮ ©   (2006-06-29 12:09) [19]

Даже точнее, у автора добавляются узла парами, а Data определяется для одного из них


 
Плохиш ©   (2006-06-29 12:12) [20]


> ЮЮ ©   (29.06.06 12:09) [19]
> Даже точнее, у автора добавляются узла парами

Первый узел в треевию не добавляется, поэтому, скорее всего, автор ошибку-то и не смог сразу найти.


 
ЮЮ ©   (2006-06-29 12:23) [21]

>Первый узел в треевию не добавляется,

Почему?

Node  := TTreeNode.Create(TreeView1.Items);
  // Node станет членом коллекции TreeView1.Items  
Node.Data := Opis;
TreeView1.Items.Add(Node, "Node");
  // Вслед за добавленным узлом Node создается ещё один


 
Плохиш ©   (2006-06-29 12:30) [22]


> ЮЮ ©   (29.06.06 12:23) [21]
> >Первый узел в треевию не добавляется,
>
> Почему?
>
> Node  := TTreeNode.Create(TreeView1.Items);
>   // Node станет членом коллекции TreeView1.Items

Странно, но в TTreeNode.Create нигде не стоит добавление куда-либо, а есть только присвоение FOwner.


 
ЮЮ ©   (2006-06-29 12:40) [23]

И впрямь. Тем более: те TreeNode, для которых устанавливались Data в TreeView не попадали, а поподали только с nil-евой Data


 
Stakan ©   (2006-06-29 12:54) [24]

procedure TForm1.Button1Click(Sender: TObject);
var
 Opis : TDescription;
begin
 Opis := TDescription.Create;
 Opis.Name := "Name";
 Opis.Description.Add("Description");
 
 TreeView1.Items.AddObject(nil, "Banzai", Pointer(Opis));
end;


 
PSPF2003 ©   (2006-06-29 13:23) [25]

Всем спасибо, все работает



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

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
2-1151318301
fast2
2006-06-26 14:38
2006.07.16
Как сделать инсталятор?


2-1151410551
tony
2006-06-27 16:15
2006.07.16
Открыть файл


2-1151514986
NORDmen
2006-06-28 21:16
2006.07.16
Поток в созаднном мной классе


11-1130241111
NORDmen
2005-10-25 15:51
2006.07.16
screen&amp;treginifile


2-1151429818
так себе
2006-06-27 21:36
2006.07.16
Ввод допустимых символов