procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
p:^string;
bh:string;
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if (sender is TTreeView) and (source is TListView) then
begin
p:=TreeView1.selected.Data; ////这一句不对得到是始终是原先选中的那个结点而不是要落下的结点
bh:=trim(ListView1.Selected.SubItems.GetText);
bh:=Copy(bh,1,3);
showmessage(bh);
showmessage(p^);
if bh=trim(p^) then
begin
MessageDlg('不能移动该用户!原因:源抄表本与目的抄表本相同!', mtInformation,[mbOk], 0);
ListView1.EndDrag(False);
end;
end;end;
var
p:^string;
bh:string;
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if (sender is TTreeView) and (source is TListView) then
begin
p:=TreeView1.selected.Data; ////这一句不对得到是始终是原先选中的那个结点而不是要落下的结点
bh:=trim(ListView1.Selected.SubItems.GetText);
bh:=Copy(bh,1,3);
showmessage(bh);
showmessage(p^);
if bh=trim(p^) then
begin
MessageDlg('不能移动该用户!原因:源抄表本与目的抄表本相同!', mtInformation,[mbOk], 0);
ListView1.EndDrag(False);
end;
end;end;
HT: THitTests;
AnItem: TTreeNode;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
int X, int Y)
{
if(Sender->ClassNameIs("TTreeView") && Source->ClassNameIs("TTreeView"))
{
TTreeNode *TargetNode = TreeView1->GetNodeAt(X,Y);
if(TargetNode != NULL)
{
TTreeNode *SourceNode;
SourceNode = TreeView1->Selected;
TreeView1->Items->BeginUpdate();
try
{
if((SourceNode->Level) < (TargetNode->Level))
exit;
else
{
CopyNodeUnder(TreeView1,SourceNode,TargetNode);
TargetNode->Expand(false);
TreeView1->Selected = TargetNode;
}
}
__finally
{
TreeView1->Items->EndUpdate();
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
TTreeNode *TargetNode = TreeView1->GetNodeAt(X,Y);
//Accept = true;
if((Source == Sender) && (TargetNode != NULL))
{
Accept = true;
TTreeNode *SourceNode = TreeView1->Selected;
while((TargetNode->Parent != NULL) && (TargetNode != SourceNode))
{
TargetNode = TargetNode->Parent;
}
if(TargetNode != SourceNode)
{
Accept = false;
}
}
else
{
Accept = false;
}
}