C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Drag&Drop в TreeView
Valdemar
Отправлено: 28.09.2004, 14:24


Мастер участка

Группа: Участник
Сообщений: 433



Сделал для дерева (TTreeView) поддержку операций Drag&Drop. С каждым узлом дерева связан объект. Эти объекты хранятся в БД, на основе этих данных строится дерево.
Если в дереве перенести узел и сразу же сделать сохранение в БД без перехода на какой-либо другой узел, то объект из переносимого узла оказывается связан еще и с узлом, который был ранее родителем переносимого узла. Но если перед сохранением выделить любой другой узел, то проблем нет. Почему так происходит не пойму.
Вот кусок программы:
CODE
void __fastcall TmainForm::TreeView1MouseDown(TObject *Sender,
     TMouseButton Button, TShiftState Shift, int X, int Y)
{
   if(Button == mbLeft && Shift.Contains(ssCtrl))
   {
       ddNode = TreeView1->GetNodeAt(X,Y);  // запоминаю перемещаемый узел
       if(ddNode == TreeView1->Items->Item[0]) return
       TreeView1->BeginDrag(true, 1);
   }
}
//---------------------------------------------------------------------------

void __fastcall TmainForm::TreeView1DragOver(TObject *Sender,
     TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
//здесь идут проверки на допустимость переноса узла
}
//---------------------------------------------------------------------------

void __fastcall TmainForm::TreeView1DragDrop(TObject *Sender,
     TObject *Source, int X, int Y)
{
   TTreeNode * Node, *SelNode;
   Node=TreeView1->GetNodeAt(X,Y);
   if (!Node) return;
   SelNode=TreeView1->Selected;
   SelNode->MoveTo(Node,naAddChild);
}
olegenty
Отправлено: 28.09.2004, 15:55


Ветеран

Группа: Модератор
Сообщений: 2412



а ты уроки зацени..., там как раз сие описано, да так не по детски...
http://www.cbuilder.ru/WinLesson/bles3.htm
Valdemar
Отправлено: 29.09.2004, 09:36


Мастер участка

Группа: Участник
Сообщений: 433



Эту статью я читал. Примерно так я и делал. Только у меня считывание дерева из БД происходит один раз целиком, а не по мере необходимости.

Вернуться в Вопросы программирования в C++Builder