Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Drag & Drop vom VST zum Explorer (https://www.delphipraxis.net/120336-drag-drop-vom-vst-zum-explorer.html)

itashadow 9. Sep 2008 14:29


Drag & Drop vom VST zum Explorer
 
Hi

ich hab da 2 VST auf meiner Form
der linke ist dazu da um eine Ordnerstruktur innerhalb des programmordners anzuzeigen
der rechte zeigt mir dateien(vorgänge\anfragen) an und dazugehörige reaktionen(antworten Kontrollnachrichten)

jetzt kam die anforderung das man per Drag&Drop die Dateien von der Dateianzeige zb auf den Desktop Droppen kann.

allerdings komm ich mit dem DoDragDrop vom Tvirtualtree nicht zurecht.

in der virtualtree unit steht:
Delphi-Quellcode:
procedure TBaseVirtualTree.DoDragDrop(Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
  Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);

begin
  if Assigned(FOnDragDrop) then
    FOnDragDrop(Self, Source, DataObject, Formats, Shift, Pt, Effect, Mode);
end;
hab das nu versucht im onmousemove zu machen und so sieht es aus:

Delphi-Quellcode:
procedure TForm10.treeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
  Threshold = 5;
var
  SelFileList: TStrings;
  i: Integer;
  DataObject: IDataObject;
  KOORDINATE: TPoint;
  Effect, Effect2: integer;
  node: pvirtualnode;
  daten: ptreedata;
  wordarray: tformatarray;
begin
  setlength(wordarray, tree.selectedcount);
  koordinate.X := x;
  koordinate.Y := y;
  with Sender as TVirtualStringtree do
  begin
    if (SelectedCount > 0) and (csLButtonDown in ControlState) then
      begin
      SelFileList := TStringList.Create;
      try
        SelFileList.Capacity := SelectedCount;
        node := tree.GetFirstSelected;
        for i := 0 to SelectedCount - 1 do
        begin
          wordarray[i] := i;
          while (tree.GetNodeLevel(node) > 0) and (node <> nil) do
          begin
            node.Parent;
          end;
          daten:= tree.GetNodeData(node);
          if Selected[node] then SelFileList.Add(daten.Dateiname);
          node := tree.GetNextSelected(node);
        end;
        DataObject := GetFileListDataObject(dragquelle, SelFileList);
      finally
        SelFileList.Free;
      end;

      Effect:= DROPEFFECT_COPY;
      DoDragDrop(sender, DataObject, wordarray, shift, koordinate, Effect, dmBelow);
    end;
  end;
end;
nu kann ich zwar noch wie gewollt die dateien in andere ordner reinziehen wenn ich die in der Ordneranzeige droppe allerdings kann ich ausserhalb von meiner form nichts droppen.

was muss ich tun?

ps. was muss eigentlich genau in mein wordarray rein?


schonmal danke:)

sirius 9. Sep 2008 16:56

Re: Drag & Drop vom VST zum Explorer
 
Du musst nicht DoDragDrop aufrufen. Das macht er schon selber.

Du musst erstmal das Ereignis onDragAllowed verwenden und dort je nach Eintrag eben allowed auf True setzen (oder eben immer auf true setzen).

Was jetzt eher dein Problem sein dürfte, wie erkennt der Explorer, dass dies eine Datei ist.

itashadow 10. Sep 2008 07:56

Re: Drag & Drop vom VST zum Explorer
 
schonmal danke:)


aber hast recht mein problem ist jetzt wie ich dem Explorer eintrichter, das es sich um dateien handelt:(

toms 10. Sep 2008 08:05

Re: Drag & Drop vom VST zum Explorer
 
Hallo,

Da es sich um ein Drag & Drop zum Windows Explorer handelt, kannst du nicht die TBaseVirtualTree.DoDragDrop verwenden.

Erstelle IDropSource, IDataObject und rufe DoDragDrop() auf.

Beispiel (ist anzupassen für VST) http://www.swissdelphicenter.ch/de/showcode.php?id=2335

sirius 11. Sep 2008 12:07

Re: Drag & Drop vom VST zum Explorer
 
Zitat:

Zitat von toms
Erstelle IDropSource, IDataObject und rufe DoDragDrop() auf.

Der VST macht das ja auch. Die Frage ist, wie weit es implmentiert ist und was überhaupt im VST drin steht.

itashadow 11. Sep 2008 16:04

Re: Drag & Drop vom VST zum Explorer
 
das hatte ich ja auch soweit schon alles gemacht nur leider führt das immernoch nicht zu dem gewünschten ergebnis...
drag drop zum explorer klappt nicht
und wenn ich vom rechten tree in den linken verschieben will gibt es beim 1. versuch eine zugriffsverletzung und ab dann klappt es ohne probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 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