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

Вниз

Как в TreeView при DragDrop узнать что узел может принять ветку?   Найти похожие ветки 

 
Roki   (2003-04-04 09:45) [0]

Мастера, делаю DragDrop веток. Как мне сделать так чтобы не было зацыкливания : ветку вставляю в подветку этой же ветки?


 
MBo ©   (2003-04-04 09:49) [1]

В Статьи загляни


 
Polevi ©   (2003-04-04 10:53) [2]

TTreeNode.HasAsParent


 
Polevi ©   (2003-04-04 10:56) [3]

procedure TsetsFrm.TreeDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=not TTreeView(Source).DropTarget.HasAsParent(TTreeNode(Source).Selected);
end;


 
Roki   (2003-04-04 14:16) [4]

Из статьи.
Код OnDragDrop выглядит так:

var
Node, SelNode: TTreeNode;
begin
Node := TreeView1.GetNodeAt(X, Y);
if Node = nil then
Exit;
SelNode := TreeView1.Selected;
SelNode.MoveTo(Node, naAddChild);//тут ошибка иногда
// все уже встроено в TreeView
end;

Иногда почему-то выскаивает Access Violation при переносе узла. Что может быть за трабл?


 
MBo ©   (2003-04-04 14:37) [5]

У меня не выскакивало. Selected всегда не nil - это перетаскиваемый узел, а других причин для AV я вроде не вижу.


 
Roki   (2003-04-04 14:44) [6]

смотрю CPU:
TTreeNode.GetTreeView:
по адресу
0046f087 mov eax,[eax+$04]
Я переписал как сделал один програмер(FIBDBtreeView):

procedure DoChangeParent(vTreeView : TTreeView; Dest, Source: TTreeNode; AutoCommit: Boolean = False);
var NewParentId, ID: Integer;
NewNode:TTreeNode;
begin
with vTreeView do
begin
Items.BeginUpdate;

// DoDBChangeParent(NewParentID, Id);

NewNode:=Items.AddChildObject(Dest, Source.Text, Source.Data);
NewNode.HasChildren := true;

with NewNode do
begin
ImageIndex := Dest.ImageIndex;
SelectedIndex:= Dest.StateIndex;
end;

Source.Data:=nil;

Items.Delete(Source);

AlphaSort;
NewNode.Selected:=True;
Items.EndUpdate;
end;
end;

так не выскакивает, но работает глюкаво. И еще, я строю дерево из БД.


 
Roki   (2003-04-04 15:24) [7]

Мастера, помогите...


 
Roki   (2003-04-04 15:54) [8]

Ау, кто-то может помочь?


 
Polevi ©   (2003-04-04 16:30) [9]

DragOver надо использовать, он для этого предназначен, см.
>Polevi © (04.04.03 10:56)



 
Roki   (2003-04-07 11:03) [10]

несовметимые типы boolean и Treeview ...


 
Roki   (2003-04-07 11:19) [11]

нужно ли в каждом обработчике писать
в DragOver
inherited DragOver(Source, X, Y, State, Accept);
а в DragDrop
inherited DragDrop(Source, X, Y);


 
Roki   (2003-04-07 11:37) [12]

Мастера помогите...


 
Smok_er   (2003-04-07 12:04) [13]

Честно говоря, я не совсем понял вопрос...
если речь идет о том, что тривью "позволяет" перенести родительскую в дочернюю, и глупый юзер может случайно перенести ноду "не туда", что вызовет зацикливание, то я сделал так:


Node := TargetNode;
while Node <> nil do
begin
if Node.Parent = DragNode then
begin
MessageBox(Handle, "Can""t move parent node to his child node", "Error", MB_OK);
Exit;
end;
Node := Node.Parent;
end;


Сейчас пояснять все не хочется, но если возникнут вопросы - готов разъяснить


 
Roki   (2003-04-07 12:08) [14]

У меня дерево строится из БД, если использовать как советует Борис Новгородов(статьи), то такое рабтает когда обычное дерево. А вот в моем случае иногда выскакивает Access violation. Где-то я напортачил...


 
Roki   (2003-04-07 13:35) [15]

Мастера помогите...
Можете написать в какой последовательности происходят события при перетаскивании. Я так понял AV происходит если перетаскиваемый узел nil. Т.е. его не существеут, а так как у меня дерево строится динамически, то все может быть. Плиз, разясните где искать ошибку...



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

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

Наверх




Память: 0.5 MB
Время: 0.012 c
3-54466
Andy
2003-03-28 16:04
2003.04.17
Как програмно добавить поле в уже существующую DBF таблицу


14-54883
Supreme 2
2003-04-01 19:24
2003.04.17
Как установить ICQ, если используется прокси-сервер


8-54750
vvvaaa
2003-01-17 13:43
2003.04.17
Градиент


1-54592
bSava
2003-04-07 11:50
2003.04.17
Окно поверх всех окон.


1-54579
Alex_2003
2003-04-05 13:01
2003.04.17
Как загрузить анимированный Gif-файл??? (Новичок)