Drag & Drop verwenden

// 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;
        }
     }
}