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

Вниз

TreeView.Items.Clear - Access violation   Найти похожие ветки 

 
Я1   (2005-03-14 11:25) [0]

Кто нибудь сталкивался с это проблемой?
При вызове Clear компонент перебирает все ноуды и для каждого помимо всего прочего выполняет это:

function TTreeNode.GetTreeView: TCustomTreeView;
begin
 Result := Owner.Owner;
end;

У ноуда оунер - TTreeNodes
У TTreeNodes оунер - TCustomTreeView
Но как минимум у одного ноуда (у самого первого) нет оунера.
Так получается?
Самое интересное, что если в процедуре, где вызывается Clear, ставишь BreakPoint, то Access violation не происходит.


 
Erik1 ©   (2005-03-14 12:15) [1]

У TreeView вобще много заморочек, возми другой Tree. Я сейчас использую EhLib, там есть режим отображения дерева.


 
Digitman ©   (2005-03-14 12:34) [2]


> При вызове Clear компонент перебирает все ноуды и для каждого
> помимо всего прочего выполняет это


ой врешь ведь ...

фрагмент ComCtrls.pas (D7):

procedure TTreeNodes.Clear;
var
 LHandleAllocated: Boolean;
begin
 LHandleAllocated := Owner.HandleAllocated;
 if LHandleAllocated then
   BeginUpdate;
 try
   ClearCache;
   if Owner.HandleAllocated then
     TreeView_DeleteAllItems(Owner.Handle);
 finally
   if LHandleAllocated then
     EndUpdate;
 end;
end;

и ГДЕ ты здесь видишь какой-то "перебор" ?

а уж коль речь идет об обработке события TTreeView.OnDeletion, то ошибки в его обработчике - это твои проблемы, а не проблемы компонента TTreeView


 
MBo ©   (2005-03-14 12:38) [3]

>Так получается?
procedure TForm1.Button1Click(Sender: TObject);
begin
 Treeview1.Items.Clear;
end;

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
 Memo1.Lines.Add(Node.TreeView.Name);
end;

Нет, не получается.
Код покажи.


 
Я1   (2005-03-14 13:23) [4]

OnDeletion ничего нет

TreeView_DeleteAllItems(Owner.Handle) как раз и перебирает.
Код долго показывать. Первый ноуд добавляю с помощью Add,
в качестве сиблина передаю nil, остальные - передаю последний добавленный


 
Я1   (2005-03-14 13:28) [5]

пардон, не перебирает.
Но ошибка происходит именно здесь
function TTreeNode.GetTreeView: TCustomTreeView;
begin
Result := Owner.Owner;
end;


 
Я1   (2005-03-14 13:28) [6]

пардон, не перебирает.
Но ошибка происходит именно здесь
function TTreeNode.GetTreeView: TCustomTreeView;
begin
Result := Owner.Owner;
end;


 
Digitman ©   (2005-03-14 13:32) [7]


> TreeView_DeleteAllItems(Owner.Handle) как раз и перебирает


и опять врешь

цитирую :

function TreeView_DeleteAllItems(hwnd: HWND): Bool;
begin
 Result := Bool( SendMessage(hwnd, TVM_DELETEITEM, 0, Longint(TVI_ROOT)) );
end;


> Первый ноуд добавляю с помощью Add,
> в качестве сиблина передаю nil, остальные - передаю последний
> добавленный


видимо, ты путаешь Owner и Parent

ВСЕ узлы дерева как объекты-наследники класса TTreeNode имеют одного и того же Owner"а (ВНЕ зависимости от того, как и каким Add-методом узел был добавлен) - это объект-наследник TTreeNodes

Parent"а же имееют только те узлы, которые не являются корневыми


 
Я1   (2005-03-14 13:42) [8]

parents здесь ни причем.
ошибка происходит здесь:
Result := Owner.Owner;
Да и вообще, как может получаться, что если ставишь BreakPoint,
ошибки нет, убираешь - есть?
Может, ошибка происходит от того, что во время очистки ноудов TreeView пытается что-то прорисовать, и рисовать нечего?


 
Digitman ©   (2005-03-14 16:22) [9]


> ошибка происходит здесь:
> Result := Owner.Owner;


"Караул устал !" (с)

на то есть встр.дебагер, позволяющий определить, КТО есть нормально существующий объект - то ли Self.Owner, то ли Self.Owner.Owner



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
1-1110927707
Змей
2005-03-16 02:01
2005.03.27
Colordialog


1-1110714640
Object
2005-03-13 14:50
2005.03.27
Куда прописать файлы *.dcr;*.dcu;*.hpp;*.obj...


14-1109946252
ArMellon
2005-03-04 17:24
2005.03.27
Как подключить комп к телевизору


1-1110471877
nes
2005-03-10 19:24
2005.03.27
BRCC32.exe (Borland Resource CommandLine Compiler)


14-1110047946
ShanK
2005-03-05 21:39
2005.03.27
Помогите решить задачу!