这是 Ttreenode.moveto  的例子 :
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);var 
  AnItem: TTreeNode;
  AttachMode: TNodeAttachMode;
  HT: THitTests;
begin
  if TreeView1.Selected = nilthen Exit;
  HT := TreeView1.GetHitTestInfoAt(X, Y); 
  AnItem := TreeView1.GetNodeAt(X, Y);
  if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then 
  //从上面开始“(HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT)  说这个运算符不对,还有下在面的(htOnItem in HT) 等也都不行。
  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;

解决方案 »

  1.   

    见鬼,你没发现begin下边的NIL和THEN贴一起了吗?
    改成下边的.
    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 
      //从上面开始“(HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT)  说这个运算符不对,还有下在面的(htOnItem in HT) 等也都不行。
      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;
      

  2.   

    不关这个的事,是 ( htOnItem in HT) 这个运算不能完成,你说的那行在我的程序里根本没用,上面是我从帮助里COPY过来的。
    下面的运算在我这都不能完成:
    (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT)
    (htOnItem in HT) or (htOnIcon in HT)
    htNowhere in HT
    htOnIndent in HT
      

  3.   

    试试
    if ((HT - [htOnItem, htOnIcon, htNowhere, htOnIndent]) <> HT) then