Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с DATA


Страницы:   1 2

PSPF2003 ©   (2006-06-29 11:28:00) 

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

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;

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


PSPF2003   (2006-06-29 13:23:00) [1]

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


Stakan   (2006-06-29 12:54:00) [2]

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;


ЮЮ   (2006-06-29 12:40:00) [3]

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


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


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

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


ЮЮ   (2006-06-29 12:23:00) [5]

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

Почему?

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


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


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

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


ЮЮ   (2006-06-29 12:09:00) [7]

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


ЮЮ   (2006-06-29 12:06:00) [8]

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


PSPF2003   (2006-06-29 12:03:00) [9]


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

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


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


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

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


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


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

Ты про что ?


Ega23   (2006-06-29 11:55:00) [12]


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


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


ЮЮ   (2006-06-29 11:54:00) [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;


PSPF2003   (2006-06-29 11:52:00) [14]

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


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


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

nil;-)


PSPF2003   (2006-06-29 11:49:00) [16]


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

Opis ?


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


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

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

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

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


Ega23   (2006-06-29 11:47:00) [18]


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


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


PSPF2003   (2006-06-29 11:46:00) [19]

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


Ega23   (2006-06-29 11:46:00) [20]

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

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


Страницы:   1 2

Наверх

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