AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree und Drag'n'Drop

Ein Thema von CalganX · begonnen am 23. Jul 2004 · letzter Beitrag vom 6. Nov 2009
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

VirtualStringTree und Drag'n'Drop

  Alt 23. Jul 2004, 20:47
Hi,
ich habe inzwischen die Grundlagen des Drag'n'Drop's beim VirtualStringTree realisieren können. Sprich die Items lassen sich bewegen.
Dazu habe ich (aus der Doku) folgendes im OnDragDrop-Eregnis stehen:
Delphi-Quellcode:
procedure TfrmMain.vstDataDragDrop(Sender: TBaseVirtualTree;
  Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
  Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var
  i: Integer;
  AttachMode: TVTNodeAttachMode;
begin
  if Length(Formats) > 0 then
  begin
    for i:=0 to High(Formats) do
      if Formats[i] = CF_VIRTUALTREE then
      begin
        case Mode of
          dmAbove:
            AttachMode := amInsertBefore;
          dmBelow:
            AttachMode := amInsertAfter;
          dmOnNode:
            AttachMode := amNowhere;
        else
          if Assigned(Source) and (Source is TBaseVirtualTree) and (Sender <> Source) then
            AttachMode := amInsertBefore
          else
            AttachMode := amNowhere;
        end;
        Sender.ProcessDrop(DataObject, Sender.DropTargetNode, Effect, AttachMode);
        Break;
      end;
  end;
end;
Um dann noch zu überprüfen, ob die Node an der neuen Position abgelegt werden darf, steht folgendes im OnDragOver-Ereignis:
Delphi-Quellcode:
procedure TfrmMain.vstDataDragOver(Sender: TBaseVirtualTree;
  Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
  Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
begin
  case Mode of
    dmAbove, dmBelow:
      Accept := true;
  else
    Accept := false;
  end;
end;
Mein Problem ist jetzt, dass das, was dort steht nicht uneingeschränkt gilt. Genauer gesagt, dürfen die Nodes nur auf Ihrer Ebene bleiben (das heißt Ebene und Parent müssen gleich bleiben).
Nur komme ich nicht an die Node dran, die gerade verschoben wird und vorallem nicht an die Position, wo es hinsoll. Okay... Wenn ich das richtig sehe habe ich die Koordinaten, allerdings bringt mir das nichts, um darauf zu schließen in welcher Ebene das landen wird.

Kennt jemand eine elegante Möglichkeit dieses kleine Problem zu lösen?

Chris
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: VirtualStringTree und Drag'n'Drop

  Alt 24. Jul 2004, 12:54
Hi,
so... Habe es gerade selber lösen können.

Für die, die an der Lösung interessiert sind:
Delphi-Quellcode:
procedure TfrmMain.vstDataDragOver(Sender: TBaseVirtualTree;
  Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
  Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
var
  pUsedNode, pTargetNode: PVirtualNode;
begin
  pUsedNode := vstData.FocusedNode;
  pTargetNode := vstData.DropTargetNode;

  if (pUsedNode <> nil) and (pTargetNode <> nil) then begin
    Accept := (pUsedNode.Parent = pTargetNode.Parent);
  end;
end;
Funktioniert einwandfrei.

Chris
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#3

Re: VirtualStringTree und Drag'n'Drop

  Alt 6. Nov 2009, 16:05
ich weiß das der thread schon einige jahre alt ist, aber, WO gibt es diese doku zu Drag&Drop?
Hätte da GROOOOOOßES interesse dran
  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 22:08 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