procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if (Source is TTreeView) and Assigned(TTreeView(Source).Selected) then
with TLabel.Create(Self) do begin
Cursor := crHandPoint;
Parent := TWinControl(Sender);
Left := X;
Top := Y;
Caption := TTreeView(Source).Selected.Text;
OnMouseDown := LabelMouseDown;
OnMouseMove := LabelMouseMove;
OnMouseUp := LabelMouseUp;
end;
end;
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TTreeView) and Assigned(TTreeView(Source).Selected);
end;
procedure TForm1.LabelMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FMouseDown then begin
TLabel(Sender).Left := TLabel(Sender).Left + (X - FPoint.X);
TLabel(Sender).Top := TLabel(Sender).Top + (Y - FPoint.Y);
end;
end;
object TreeView1: TTreeView
DragMode = dmAutomatic
end
object Panel1: TPanel
OnDragDrop = Panel1DragDrop
OnDragOver = Panel1DragOver
end
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TTreeView) and Assigned(TTreeView(Source).Selected);
end;
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if (Source is TTreeView) and Assigned(TTreeView(Source).Selected) then
with TLabel.Create(Self) do begin
Parent := TWinControl(Sender);
Left := X;
Top := Y;
Caption := TTreeView(Source).Selected.Text;
end;
end;