Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [FMX] TTreeView onDradDrop Handler (https://www.delphipraxis.net/197863-%5Bfmx%5D-ttreeview-ondraddrop-handler.html)

LoZe 12. Sep 2018 15:15

[FMX] TTreeView onDradDrop Handler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich habe da ein kleines Problem.

ich will die User im TreeView per Drag and Drop in die verschiedenen Schichten einteilen.
aber ich will nicht des ein User einem User Untergeordnet werden kann.

ich habe das jetzt im Moment so Gelöst:
Delphi-Quellcode:
procedure TForm2.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
var
  node:TTreeViewItem;
begin
  if (TreeView1.Selected <> nil) and (SsLeft in Shift) then
  begin
    node:= TreeView1.Selected;
    if node.text[1] = '@' then BeginInternalDrag(TreeView1.Selected, Image2.Bitmap);
  end;
end;


procedure TForm2.TreeView1DragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);
var
  TargetNode : TTreeViewItem;
  SourceNode : TTreeViewItem;
begin
  TargetNode := TreeView1.ItemByPoint(Point.X,Point.Y);
  SourceNode := Data.Source as TTreeViewItem;

  if op = TDragOperation.None then
  begin
    Abort; // <- Hier der Abbruch ***
  end;
  ShowMessage(SourceNode.Text + ' -> ' + TargetNode.Text);
end;
mein Problem Dabei ist dass, das Drag Object weiterhin Sichtbar ist wie breche ich den Drag Vorgang ab?

LoZe 14. Sep 2018 07:30

AW: [FMX] TTreeView onDradDrop Handler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier Nochmal ein Bild in dem man das Problem besser erkennt.

Das Drop Item wird komplett Überlagern angezeigt auch wenn ich eine andere Anwendung im Vordergrund habe.

wie Zerstöre ich dies bei einem fehlerhaften Drop

Harry Stahl 14. Sep 2018 18:41

AW: [FMX] TTreeView onDradDrop Handler
 
Du könntest es z.B. so lösen:
Delphi-Quellcode:
procedure TForm18.TreeView1DragChange(SourceItem, DestItem: TTreeViewItem;
  var Allow: Boolean);
begin
  Allow := copy (DestItem.text, 1,1) <> '@';
end;
Dann wird das Drop nur akzeptiert, wenn die übergeordneten Knoten der User als Ziel ausgewählt werden.

LoZe 16. Sep 2018 11:38

AW: [FMX] TTreeView onDradDrop Handler
 
Vielen Dank für die Antwort ich werde es Morgen mal testen.

LoZe 17. Sep 2018 12:14

AW: [FMX] TTreeView onDradDrop Handler
 
Zitat:

Zitat von Harry Stahl (Beitrag 1413222)
Du könntest es z.B. so lösen:
Delphi-Quellcode:
procedure TForm18.TreeView1DragChange(SourceItem, DestItem: TTreeViewItem;
  var Allow: Boolean);
begin
  Allow := copy (DestItem.text, 1,1) <> '@';
end;
Dann wird das Drop nur akzeptiert, wenn die übergeordneten Knoten der User als Ziel ausgewählt werden.

Hallo Harry,
Deine Lösung war genau das, wonach ich suchte.
Funktioniert einwandfrei.
:thumb:

Vielen Dank.

Harry Stahl 18. Sep 2018 16:17

AW: [FMX] TTreeView onDradDrop Handler
 
OK, freut mich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz