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
|
Эту статью я читал. Примерно так я и делал. Только у меня считывание дерева из БД происходит один раз целиком, а не по мере необходимости. |
|
|