Seite 1 von 1

Drag'n Drop: Mauszeiger während des Drag-Vorgangs ändern?

Verfasst: 04.10.2007 15:46
von Kiffi
Ist es möglich, bei DragFiles() den Mauszeiger (Copy oder Move) auch
während des Drag-Vorganges zu verändern, indem ich (wie im Explorer)
die Shift-Taste nachträglich drücke?

(basierend auf folgendem Drag and Drop-Code von ts-soft)

Code: Alles auswählen

If OpenWindow(0, 200, 200, 430, 400, "Drag & Drop", #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  
  
  ExplorerListGadget(1, 10, 10, 200, 380, "*", #PB_Explorer_MultiSelect)
  ExplorerListGadget(2, 210, 10, 200, 380, "*", #PB_Explorer_MultiSelect)
  
  EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Copy | #PB_Drag_Move)
  EnableGadgetDrop(2, #PB_Drop_Files, #PB_Drag_Copy | #PB_Drag_Move)
  
  Repeat

    event = WaitWindowEvent(0)
    
    If event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      Files$ = ""
      
      If EventGadget() = 1    ;wird beim drag vom ExplorerList 1 ausgeführt
        For i = 0 To CountGadgetItems(1)-1
          If GetGadgetItemState(1, i) & #PB_Explorer_Selected
            Files$ + GetGadgetText(1) + GetGadgetItemText(1, i) + Chr(10)
          EndIf
        Next i
        Debug Files$
      EndIf
      
      
      If EventGadget() = 2    ;wird beim drag vom ExplorerList 1 ausgeführt
        For i = 0 To CountGadgetItems(2)-1
          If GetGadgetItemState(2, i) & #PB_Explorer_Selected
            Files$ + GetGadgetText(2) + GetGadgetItemText(2, i) + Chr(10)
          EndIf
        Next i
        Debug Files$
      EndIf
      
      DragFiles(Files$)
      
    ElseIf event = #PB_Event_GadgetDrop
      
      If EventGadget() = 1    ;wird beim drop im ExplorerList 1 ausgeführt
        Zieldatei$ = GetGadgetText(1)
        Dateien.s = EventDropFiles();
        Anzahl = CountString(Dateien, Chr(10)) + 1;
        Debug Zieldatei$
        For i = 1 To Anzahl
          Debug StringField(Dateien, i, Chr(10))
        Next
      EndIf
      
      If EventGadget() = 2    ;wird beim drop im ExplorerList 2 ausgeführt
        
        Zieldatei$ = GetGadgetText(2)
        Dateien.s = EventDropFiles();
        Anzahl = CountString(Dateien, Chr(10)) + 1;
        Debug Zieldatei$
        For i = 1 To Anzahl
          Debug StringField(Dateien, i, Chr(10))
        Next
      EndIf
    EndIf
    
  Until event = #PB_Event_CloseWindow
  
EndIf
Danke im voraus & Grüße ... Kiffi

Verfasst: 04.10.2007 18:21
von roherter
Also ich habe das mal ausprobiert im Explorer bei mir ändert sich kein Mauszeiger deswegen weiß ich jetzt nicht genau wie du das meinst?

Verfasst: 04.10.2007 20:26
von Kiffi
roherter hat geschrieben:Also ich habe das mal ausprobiert im Explorer bei mir ändert sich kein Mauszeiger deswegen weiß ich jetzt nicht genau wie du das meinst?
Kopieren (Datei 'draggen' mit gedrückter Shift-Taste):

Bild

Beim Verschieben hingegen erscheint das 'Plus' nicht.

Ich möchte also während des Drag-Vorgangs (in Abhängigkeit, ob Shift
gedrückt wurde oder nicht) den Copy/Move-Modus ändern.

Grüße ... Kiffi

Verfasst: 04.10.2007 21:26
von freak
Das Verschwinden des [+] läuft automatisch wenn die Tasten gedrückt werden,
aber nur wenn die gewünschte Aktion von Quelle und Ziel auch erlaubt wird.

So gehts:

Code: Alles auswählen

DragFiles(Files$, #PB_Drag_Copy|#PB_Drag_Move)
Default ist nur #PB_Drag_Move, desshalb hatte die Shift-Taste keine Wirkung, da
Verschieben keine gültige Aktion war.

Verfasst: 05.10.2007 00:25
von Kiffi
freak hat geschrieben:So gehts:

Code: Alles auswählen

DragFiles(Files$, #PB_Drag_Copy|#PB_Drag_Move)
Bingo! Danke für den Tipp! :allright:

Kurz zu meinem Vorhaben: Eigentlich plane ich für private Zwecke einen
simplen Dateimanager (à la Total Commander für Arme) mit speziellen
Funktionen. Ich würde mir seeehr viel Arbeit ersparen, wenn die beiden
ExplorerListGadgets 'richtige' Explorer-Instanzen wären. Hierzu war mein
erster Plan, 2 Explorer zu starten und diese mit SetParent in mein Fenster zu
verpflanzen, was sich aber als ziemlich schwierig erweist (siehe hierzu auch:
hWnd eines mit RunProgram() gestarteten Explorers ermitteln)

@freak:
Wenn ich 2 'richtige' Explorer-Instanzen hätte, könnte ich mir den Nachbau
deren Standardfunktionalitäten schon mal ersparen (Copy / Move /
Kontextmenü bei rechtem Mausklick, etc.) und sofort mit meinen speziellen
Funktionen loslegen können. Gibt's da einen Trick, der mir das
Programmieren erleichtern könnte?

Danke im voraus & Grüße ... Kiffi