AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Feststellen ob VirtualTreeView gerade im "Drag-Mode" ist
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen ob VirtualTreeView gerade im "Drag-Mode" ist

Ein Thema von Codehunter · begonnen am 26. Sep 2016 · letzter Beitrag vom 27. Sep 2016
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Feststellen ob VirtualTreeView gerade im "Drag-Mode" ist

  Alt 27. Sep 2016, 17:17
eine Möglichkeit schaffen, dass der Anwender die Nodes innerhalb des VST neu anordnen kann per Drag&Drop.
Ich hab das mal gemacht mithilfe der Beispiele, die im Internet im Umlauf sind.
Das waren damals zwei VSTs, die beide diese Methoden zugewiesen bekamen. Wenn von einem zum anderen gedraggt wurde, dann wurde der Node von einem Tree zum anderen kopiert; wenn innerhalb eines Trees gezogen wurde, dann dorthin verschoben.
Hoffe, das hilft.
PTreeNodeData ist ein Pointer auf eine eigene Struktur und für das Beispiel nicht wichtig.

Delphi-Quellcode:
procedure TfrmFavMan.FormCreate(Sender: TObject);
begin
  trvSources.DragMode := dmAutomatic;
  trvSources.OnDragOver := Tree1DragOver;
  trvSources.OnDragDrop := Tree1DragDrop;

  trvFavs.DragMode := dmAutomatic;
  trvFavs.OnDragOver := Tree1DragOver;
  trvFavs.OnDragDrop := Tree1DragDrop;
end;

procedure TfrmFavMan.Tree1DragOver(Sender: TBaseVirtualTree; Source: TObject;
  Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode;
  var Effect: Integer; var Accept: Boolean);
begin
  Accept := (Source is TVirtualStringTree);
end;

procedure TfrmFavMan.Tree1DragDrop(Sender: TBaseVirtualTree; Source: TObject;
  DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState;
  Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var
  Attachmode : TVTNodeAttachMode;
  Nodes : TNodeArray;
  I : Integer;
  DataOfSender : PTreeNodeData;
  DataOfSource : PTreeNodeData;
  DataOfParent : PTreeNodeData;
  NewNode : PVirtualNode;
  DrpTargetNode : PVirtualNode;
begin
  if (nil = Sender.DropTargetNode) then exit;
  if (Sender.GetFirst = Sender.DropTargetNode) and (Mode <> dmOnNode) then exit;

  if Source = Sender then
  begin
    Effect := DROPEFFECT_MOVE
  end
  else
  begin
    Effect := DROPEFFECT_COPY;
  end;

  // Translate the drop position into an node attach mode.
  case Mode of
    dmAbove : AttachMode := amInsertBefore;
    dmOnNode: AttachMode := amAddChildLast;
    dmBelow : AttachMode := amInsertAfter;
    else AttachMode := amNowhere;
  end;

  Nodes := TVirtualStringTree(Source).GetSortedSelection(True);

  if Effect = DROPEFFECT_COPY then
  begin
    DrpTargetNode := Sender.DropTargetNode;

    for I := 0 to High(Nodes) do
    begin
      NewNode := TVirtualStringTree(Sender).AddChild(DrpTargetNode);
      DataOfSource := TVirtualStringTree(Source).GetNodeData(Nodes[I]);
      DataOfSender := TVirtualStringTree(Sender).GetNodeData(NewNode);
      if (nil <> DataOfSource) then
      begin
        if (nil <> DataOfSender) then
        begin
          // Datenabgleich machen
        end;
      end;
    end;
    TVirtualStringTree(Sender).FullExpand(DrpTargetNode);

  end
  else
  begin
    DataOfParent := TVirtualStringTree(Source).GetNodeData(Sender.DropTargetNode);
    for I := 0 to High(Nodes) do
    begin
      TVirtualStringTree(Source).MoveTo(Nodes[I], Sender.DropTargetNode, AttachMode, False);
      DataOfSource := TVirtualStringTree(Source).GetNodeData(Nodes[I]);
      // Datenabgleich machen
    end;
  end;
end;
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:41 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