AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DragDrop mit TTreeViewItem als Ziel

Ein Thema von Peter-Pascal · begonnen am 10. Dez 2022 · letzter Beitrag vom 5. Jan 2023
Antwort Antwort
Seite 2 von 2     12
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
197 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: DragDrop mit TTreeViewItem als Ziel

  Alt 2. Jan 2023, 17:26
Hallo Harry,
entschuldige, es hat etwas gedauert bis ich die Demodatei fertig machte. Wenn Du noch magst, schau es Dir bitte an. Ich habe nach wie vor keine Reaktion auf seiten des TTreeview. So wie oben beschrieben.
Irgendwas mache ich da falsch.
Danke Peter
Angehängte Dateien
Dateityp: zip DragDrop.zip (6,0 KB, 3x aufgerufen)
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: DragDrop mit TTreeViewItem als Ziel

  Alt 3. Jan 2023, 10:48
Letztlich willst Du ja ein Event auf das TreeviewItem verwenden, also musst Du denen zunächst auch die Events (am besten zur Laufzeit) zuordnen. Das habe ich im Create-Event gemacht. Da gibt es wohl einen Bug (?), da die Zuordnung nur funktioniert, wenn das TTreeView einmal expandiert wurde.

In der Anlage findest Du die lauffähige Demo, wo somit das Drag & Drop auf die Items auch funktioniert.

Hier der angepasste Source:

Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
  FMX.ListView, FMX.TreeView, FMX.Layouts,FMX.Platform, FMX.Objects;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    TreeViewItem1: TTreeViewItem;
    TreeViewItem2: TTreeViewItem;
    TreeViewItem3: TTreeViewItem;
    TreeViewItem4: TTreeViewItem;
    TreeViewItem5: TTreeViewItem;
    TreeViewItem6: TTreeViewItem;
    TreeViewItem7: TTreeViewItem;
    TreeViewItem8: TTreeViewItem;
    TreeViewItem9: TTreeViewItem;
    TreeViewItem10: TTreeViewItem;
    ListView1: TListView;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Single);
    procedure TreeView1DragOver(Sender: TObject; const Data: TDragObject;
      const Point: TPointF; var Operation: TDragOperation);
    procedure TreeView1DragDrop(Sender: TObject; const Data: TDragObject;
      const Point: TPointF);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
var
  Item: TListViewItem;
  i: integer;
begin
  for i := 1 to 10 do
    begin
      Item:= ListView1.Items.Add;
      Item.Text:= 'Item' + i.ToString
    end;

  TreeView1.ExpandAll; // Ohne das funktioniert die Zuweisung nicht für untergeordnete Elemente! (Bug?)

  for i := 0 to TreeView1.GlobalCount-1 do begin
    TreeView1.ItemByGlobalIndex(i).OnDragDrop := TreeView1DragDrop;
    TreeView1.ItemByGlobalIndex(i).OnDragOver := TreeView1DragOver;
  end;

  TreeView1.CollapseAll;
end;

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
var
  Svc: IFMXDragDropService;
  DragData: TDragObject;
  Item: TListViewItem;
  List: TListView;
begin
  if (SsLeft in Shift) then
  begin
    List:= Sender as TListView;
    Item:= TListViewItem(List.Selected);
    if Assigned(Item) and TPlatformServices.Current.SupportsPlatformService(IFMXDragDropService, Svc) then
    begin
      DragData.Source:= Item;
// DragData.Data:= Item.TagObject;
      Svc.BeginDragDrop(Self, DragData, Image1.Bitmap);
    end;
  end;
end;

procedure TForm1.TreeView1DragDrop(Sender: TObject; const Data: TDragObject;
  const Point: TPointF);
begin
  if Assigned(TreeView1.Selected) then begin
    Treeview1.Selected.Text:= TListViewItem(Data.Source).Text
  end;
end;

procedure TForm1.TreeView1DragOver(Sender: TObject; const Data: TDragObject;
  const Point: TPointF; var Operation: TDragOperation);
begin
  Operation:= TDragOperation.copy;

  TTreeView(Sender).Selected:= TTreeView(Sender).ItemByPoint(Point.X, Point.y);
end;

end.
Angehängte Dateien
Dateityp: zip DragDemo.zip (90,3 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Peter-Pascal

Registriert seit: 18. Feb 2007
Ort: 32139 Spenge
197 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: DragDrop mit TTreeViewItem als Ziel

  Alt 3. Jan 2023, 15:37
Hallo Harry,
vielen Dank für Deine schnelle Anwort.

Klingt einleuchtend den Treeviewitems die zwei Events zuzuordnen. Ja Du hast Recht, ich möchte die Items beeinflussen.
Die Events sind ganz normal die von TTreeView? Also die ich auch angelegt habe?
Klasse, Drag und Drop edelt doch jede Anwendung.

Da ich die Items auch dynamisch herstelle, kann ich dann gleich die Events anhängen.

Danke noch mal für Deine Hilfe. Jetzt wo man es weiß, klingt es einfach, aber da wäre ich nie drauf gekommen.
Gruß Peter
Peter Niemeier
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.477 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: DragDrop mit TTreeViewItem als Ziel

  Alt 5. Jan 2023, 14:43
Hallo Harry,
vielen Dank für Deine schnelle Anwort.
Danke noch mal für Deine Hilfe. Jetzt wo man es weiß, klingt es einfach, aber da wäre ich nie drauf gekommen.
Gruß Peter
Prima, freut mich, dass das jetzt so für Dich passt. Zugegebenermaßen war die Lösung evtl. nicht so direkt offensichtlich, insbesondere die Sache mit dem notwendigen Expand.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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