Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Treeview Dragdrop Listview Problem :-(

  Alt 17. Dez 2006, 18:17
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
  Mit Zitat antworten Zitat