Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

Как в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
3-54507
KAA
2003-03-31 15:12
2003.04.17
2000 Каскадное удаление


11-54542
kostyantyn
2002-06-29 17:27
2003.04.17
установка КОЛ в Дельфи


1-54607
Сергей
2003-04-07 16:25
2003.04.17
DLL


3-54409
PSA
2003-04-01 11:44
2003.04.17
Создание Базы


6-54776
Sils
2003-02-24 09:45
2003.04.17
Помогите пожалуйста !!! Очень нужно !!!





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