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 Copy statt Move zwischen zwei VSTs (https://www.delphipraxis.net/120377-copy-statt-move-zwischen-zwei-vsts.html)

writeln 10. Sep 2008 07:54


Copy statt Move zwischen zwei VSTs
 
Ich habe schon reichlich gegoogelt, habe aber noch keine befriedigende Lösung gefunden...

Auf einer Form habe ich zwei VirtualExplorerListViewEx Komponenten, die unterschiedliche Ordner anzeigen.
Wenn Drag&Drop aktiviert ist, lassen sich Dateien zwischen den Ordnern verschieben.

Soweit so gut.

Ich möchte nun aber Dateien kopieren, ohne auf der Tastatur [Strg] zu drücken.
Dazu habe ich im Ereignis onDragOver Effect:= DROPEFFECT_COPY; gesetzt.

Trotzdem findet immer ein Move statt.

Auch wenn ich im Ereignis onDragDrop manuell kopiere...

Delphi-Quellcode:
procedure TForm1.VST1DragDrop(
  Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject;
  Formats: TFormatArray; Shift: TShiftState; Pt: TPoint;
  var Effect: Integer; Mode: TDropMode);
begin
  // Effect:= DROPEFFECT_COPY;
  if (Sender = VST1) and (Source = VST2)
  then begin
    Caption:= (VST2.SelectedPaths[0]);
    CopyFileTo(VST2.SelectedPaths[0],
              VST1.RootFolderCustomPath + '\'
              + VST2.SelectedFiles[0]);

  end;
end;
.. wird anschließend von den VSTs noch das Move ausgeführt.

Was habe ich vergessen??? :gruebel:

toms 10. Sep 2008 08:36

Re: Copy statt Move zwischen zwei VSTs
 
Hallo,

Was passiert, wenn Effect := DROPEFFECT_NONE gesetzt wird ?

writeln 10. Sep 2008 10:48

Re: Copy statt Move zwischen zwei VSTs
 
Jooo! das war ein guter Tipp!

Wenn im onDragDrop Event Effect auf DROPEFFECT_NONE eingestellt wird, klappt es auch mit dem Kopieren per selbst definierter Routine, bzw das anschließende Move unterbleibt.
Genau so soll es sein.

Vielen Dank Toms!


Delphi-Quellcode:
procedure TForm1.VST1DragDrop(
  Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject;
  Formats: TFormatArray; Shift: TShiftState; Pt: TPoint;
  var Effect: Integer; Mode: TDropMode);
begin
  if (Sender = VST1) and (Source = VST2)
  then begin
    Caption:= (VST2.SelectedPaths[0]);
    CopyFileTo(VST2.SelectedPaths[0],
              VST1.RootFolderCustomPath + '\'
              + VST2.SelectedFiles[0]);

  end;
  Effect:= DROPEFFECT_NONE;
  VST1.Active:= false;
  VST1.Active:= true;
end;

procedure TForm1.VST1DragOver(
  Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState;
  State: TDragState; Pt: TPoint; Mode: TDropMode; var Effect: Integer;
  var Accept: Boolean);
begin
  Accept:= true;
end;

procedure TForm1.VST2DragOver(Sender: TBaseVirtualTree; Source: TObject;
  Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode;
  var Effect: Integer; var Accept: Boolean);
begin
  Accept:= true;
end;


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