30.08.2012, 12:55
|
|
Профессионал
|
|
Регистрация: 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;
|