![]() |
Treeview Dragdrop Listview Problem :-(
Hallo,
Folgendes Problem:
Delphi-Quellcode:
Problem in Listview wird nichts eingefügt. :gruebel:
Function GetNodeText(Node: TTreeNode): String;
var I: Integer; begin if Node.Count>0 then //Untereintrag vorhanden begin Result:=Node.Text+#13#10; //Node hinzufügen For I:=0 to Node.Count-1 do //Untereinträge auslesen Result:=Result+Node[i].text+#13#10; //Untereinträge hinzufügen end else //Nur Node vorhanden Result:=Node.Text; //Node hinzufügen end; procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if (Sender = Playview) then //Von TreeView1 Accept := True; //Drag&Drop erlauben/aktivieren end; procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); begin with listview1 do begin if (TargetNode = nil) then begin EndDrag(False); Exit; end; caption := GetNodeText(TargetNode); //Eintrag/Einträge in ListView hinzufügen end; end; procedure TForm1.TreeViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin TargetNode:= TreeView.GetNodeAt(X,Y); //Node ermitteln per X,Y Koordinaten end; Gruss Bernd |
Re: Treeview Dragdrop Listview Problem :-(
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:
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?
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; Beim Ereignis OnDragOver() kannst du deinen Code vereinfachen:
Delphi-Quellcode:
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.
procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin Accept := (Sender = Playview); end; Ein neues Item fügst du mit ListView.Add() in die Liste ein:
Delphi-Quellcode:
Getippt und nicht getestet.
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; Grüße vom marabu |
Re: Treeview Dragdrop Listview Problem :-(
Hallo,
Danke für die Antword. Hab den Code mal ausprobiert ,er funktioniert nicht. gruss bernd |
Re: Treeview Dragdrop Listview Problem :-(
Hallo,
geht jetzt und anke für den denk anstoss. :thumb: gruss bernd |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz