// Im Beispiel wird ein Element (Node) aus einem Treeview in ein Listview gezogen
//
// Quelle: Node auf Level 1 (1. Unterverzweigung) eines Treeviews "tvDatapoints"
// DragCursor: crDrag
// DragKind: dkDrag
// DragMode: dmAutomatic
//
// Ziel: Listview "lvInputs" Spalte 1 (Caption von TListItem)
//
// DragCursor: crDrag
// DragKind: dkDrag
// DragMode: dmManual
//
// akzeptiert das Ziel überhaupt das Element unter der Maus?
void __fastcall Form1::lvInputsDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
bool bAccept = false;
TTreeView* pTV = dynamic_cast<TTreeView*->(Source);
if (pTV)
{
bAccept = (pTV->Selected->Level == 1); // z.B. nur wenn Node-Level == 1
}
Accept = bAccept;
}
// Zuordnung des akzeptierten Elements im Zielobjekt
void __fastcall Form1::lvInputsDragDrop(TObject *Sender, TObject *Source, int X, int Y)
{
TTreeView* pTV = dynamic_cast<TTreeView*->(Source);
if (pTV)
{
TTreeNode *pSelNode = pTV->Selected; // Quelle
TListItem *pListItem = lvInputs->GetItemAt(X, Y); // Ziel
if (pSelNode && pListItem)
{
pListItem->Caption = pSelNode->Text;
}
}
}