Показать сообщение отдельно
  #27  
Старый 30.08.2012, 12:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от tupetoner
спасибо за подсказку, а вот что писать в этих событиях, непонятно...
В свойстве DragMode у компонента TTreeView ставь dmAutomatic. А в его обработчиках примерно такой код:
Код:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  TreeView: TTreeView;
  SourceNode, TargetNode: TTreeNode;
begin
  Accept := False;
  if Source is TTreeView then
  begin
    TreeView := Source as TTreeView;
    SourceNode := TreeView.Selected;
    if SourceNode <> nil then
    begin
      TargetNode := TreeView.GetNodeAt(X, Y);
      if TargetNode = nil then
      begin
        Accept := htNowhere in TreeView.GetHitTestInfoAt(X, Y);
      end else
      begin
        Accept := True;
        while TargetNode <> nil do
        begin
          if TargetNode = SourceNode then
          begin
            Accept := False;
            Break
          end;
          TargetNode := TargetNode.Parent;
        end;
      end;
    end;
  end;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TreeView: TTreeView;
  SourceNode, TargetNode: TTreeNode;
begin
  if Source is TTreeView then
  begin
    TreeView := Source as TTreeView;
    SourceNode := TreeView.Selected;
    TargetNode := TreeView.GetNodeAt(X, Y);

    if SourceNode <> nil then SourceNode.MoveTo(TargetNode, naAddChild);
  end;
end;
Ответить с цитированием