Форум: "Начинающим";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c