(*//
标题:TreeView-StringGrid拖拽
说明:拖拽包含子节点
日期:2002-09-14
设计:Zswang
支持:[email protected]
//*)procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var
  vCol, vRow: Integer;
begin
  Accept := False;
  if not (Source is TTreeView) then Exit;
  TStringGrid(Sender).MouseToCell(X, Y, vCol, vRow);
  if vCol < TStringGrid(Sender).FixedCols then Exit;
  if vRow < TStringGrid(Sender).FixedRows then Exit;
  Accept := True;
end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(TTreeView(Sender).Selected) then
    TTreeView(Sender).BeginDrag(True);
end;procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  vCol, vRow: Integer;
  I, T: Integer;
begin
  with TStringGrid(Sender), TTreeView(Source) do begin
    MouseToCell(X, Y, vCol, vRow);
    Cells[vCol, vRow] := Selected.Text;
    for I := Selected.AbsoluteIndex + 1 to Items.Count - 1 do begin
      Inc(vRow);
      if Selected.Level >= Items[I].Level then Break;
      if vRow >= RowCount then Break;
      T := vCol + (Items[I].Level - Selected.Level);
      if vCol <= ColCount then Cells[T, vRow] := Items[I].Text;
    end;
  end;
end;