![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с DATA
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);
Ой... А это что такое????