如果在树的MouseDown中写入:
   if ( htOnItem in (sender as TTreeview).GetHitTestInfoAt( X, Y ) ) then
        begin
           (sender as TTreeview).BeginDrag( False );
        end;
可以实现拖动,但会出现阴影,请问怎样进行处理?

解决方案 »

  1.   

    procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);var 
      AnItem: TTreeNode;
      AttachMode: TNodeAttachMode;
      HT: THitTests;
    begin
      if TreeView1.Selected = nil then Exit;
      HT := TreeView1.GetHitTestInfoAt(X, Y); 
      AnItem := TreeView1.GetNodeAt(X, Y);
      if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then 
      begin
        if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
        else if htNowhere in HT then AttachMode := naAdd    else if htOnIndent in HT then AttachMode := naInsert;
        TreeView1.Selected.MoveTo(AnItem, AttachMode); 
      end;
    end;