Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.008 c
4-1144308799
Temniy
2006-04-06 11:33
2006.07.16
Многооконные приложения


15-1150465354
Polevi
2006-06-16 17:42
2006.07.16
смешно


6-1142322245
SKAyeR
2006-03-14 10:44
2006.07.16
Как получить список файлов находящихся в папке на удал. web серв


2-1151323893
VeB
2006-06-26 16:11
2006.07.16
Закрытие окна


2-1151605595
resuS
2006-06-29 22:26
2006.07.16
Что такое StdIn?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский