Du könntest eventuell auslesen, welcher Node sich unter X und Y befindet und dann reagieren, wenn sich keiner dort befindet.
Delphi-Quellcode:
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
Node: TTreeNode;
begin
Node := TTreeView(Sender).GetNodeAt(X, Y);
if Node = nil then
begin
end;
end;
Das Selektierungsproblem kann man vielleicht so lösen. Getestet habe ich es nicht
Delphi-Quellcode:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer);
var
Node: TTreeNode;
begin
Node := TTreeView(Sender).GetNodeAt(X, Y);
if Node = nil then
Node.Selected := False;
end;
Oder vielleicht im TreeView1 MouseMove abfragen, ob TreeView1.Dragging True ist und wenn ja, dann das Selektieren von Nodes nicht zulassen.