Hallo Bernd,
klar dass da nichts in die ListView eingefügt wird. Mit "caption := GetNodeText(TargetNode)" wird lediglich der Text in der Titelzeile von Form1 verändert. Ist aber für mich auch schwer zu verstehen, was du da wo einfügen willst. Du holst dir aus einer TreeView den Text eines Knoten und aller seiner direkten Nachfolger - ich habe deinen Code mal um eine Prüfung erweitert und leicht umgestellt:
Delphi-Quellcode:
function GetNodeText(Node: TTreeNode): String;
var
i: Integer;
begin
if Assigned(Node) then
begin
Result := Node.Text;
for i := 0 to Pred(Node.Count) do
Result := Result + sLineBreak + Node[i].Text;
end else Result := '';
end;
Wenn du den Knoten beim Ereignis OnMouseMove() festlegst, dann brauchst du eine ruhige Hand um die Maus nicht an der falschen Stelle aus der TreeView zu ziehen. Und eine optische Kennzeichnung des festgelegten Knotens hast du dann auch nicht. Warum verwendest du nicht einfach den angeklickten Knoten TreeView.Selected für deine Zwecke?
Beim Ereignis OnDragOver() kannst du deinen Code vereinfachen:
Delphi-Quellcode:
procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Sender = Playview);
end;
Wenn eine Drag-Operation unzulässig ist, solltest du das nicht erst beim Ereignis OnDragDrop() erkennen. Du könntest die Operation bereits beim Ereignis OnStartDrag() unterbinden. Zum Beispiel muss sich der ausgewählte Knoten sicherlich auf einer ganz bestimmten Ebene befinden, da eine Ebene tiefer keine Unterknoten mehr anzutreffen sein könnten.
Ein neues Item fügst du mit ListView.Add() in die Liste ein:
Delphi-Quellcode:
var
s: TStrings;
begin
s := TStringList.Create;
s.Text := GetNodeText(TreeView.Selected);
with ListView.Add do
begin
Caption := s[0];
s.Delete(0);
SubItems.Assign(s);
end;
s.Free;
end;
Getippt und nicht getestet.
Grüße vom marabu