Seite 1 von 2

weiteres bei Drag und Drop

Verfasst: 08.06.2007 00:58
von duli
Hallo

möchte nun einen kleinen Explorer erstellen mit welchen ich Dateien oder Verzeichnise, per drag und drop hin und her schieben kann zwischen zwei explorergadgets.

Code: Alles auswählen

; Wählen Sie einige Dateien oder Ordner und ziehen Sie diese zu einer anderen Applikation
  ;
  If OpenWindow(1, 200, 200, 420, 400, "Drag & Drop", #PB_Window_SystemMenu)
    CreateGadgetList(WindowID(1))
    ExplorerListGadget(1, 10, 10, 200, 380, "*", #PB_Explorer_MultiSelect)
    ExplorerListGadget(2, 210, 10, 200, 380, "*", #PB_Explorer_MultiSelect)
      
    Repeat
      Event = WaitWindowEvent()  
          
      If Event = #PB_Event_Gadget And EventGadget() = 1 And EventType() = #PB_EventType_DragStart
        Files$ = ""       
        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        
        EventDropFiles(#PB_Drop_Files )

;         DragFiles(Files$)
      EndIf      
      
    Until Event = #PB_Event_CloseWindow
  EndIf
Das Greifen geht aber das einfügen habe ich nicht verstanden, habe schon einiges versucht aber irgendwie klappt es nicht.

Danke für euere Hilfe

Verfasst: 08.06.2007 01:27
von edel

Code: Alles auswählen

  If OpenWindow(0, 200, 200, 430, 400, "Drag & Drop", #PB_Window_SystemMenu)
    CreateGadgetList(WindowID(0))
    
    ListIconGadget(0, 10 , 10, 200, 380,"Test 1",160)
    ListIconGadget(1, 215, 10, 200, 380,"Test 2",160)
    
    EnableGadgetDrop(0, #PB_Drop_Text, #PB_Drag_Move)
    EnableGadgetDrop(1, #PB_Drop_Text, #PB_Drag_Move)
    
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the ListIcon 1")   
      AddGadgetItem (1, -1, "Item " + Str(a) + " of the ListIcon 2")   
    Next 
    
    
    Repeat
      event = WaitWindowEvent() 
      
      If event = #PB_Event_Gadget
        
        id = EventGadget()
        
        If EventType() = #PB_EventType_DragStart 
          
          text.s = GetGadgetText(id) 
          
          DragText(text,#PB_Drag_Move) 
          
        EndIf
        
        
      ElseIf event = #PB_Event_GadgetDrop
        
        id   = EventGadget() 
        text = EventDropText()
        
        AddGadgetItem(id,-1,text)
        
      EndIf
      
    Until event = #PB_Event_CloseWindow
    
  EndIf

Verfasst: 08.06.2007 01:51
von duli
Danke Edel

Aber das mit den Text gadget und File Gadget verwirrt mich sehr, bei den Texten ist es mir irgenwie klar, aber bei den files weiss ich nicht so genau.

Ich weiss das bei meinem Beispiel der Wert weitergegeben wir aber wie der Wert dann so ausgewertet wird das daraus ein wirklicher Kopie befehl wird ist mir unklar. :oops:

Verfasst: 08.06.2007 01:56
von ts-soft
Es werden Dir nur die Dateinamen einschl. Pfad übergeben, die sind durch
Chr(10) getrennt. Das kopieren mußte selber machen, die Namen haste ja,
das erledigt niemand für Dich

Verfasst: 08.06.2007 01:59
von duli
Das will ich auch gar nicht :roll: nur ist mir nicht klar wie ich es grundsätzlich angehen soll. Muss ich das mit einem Befehl aus der möglichkeiten von Drag und Drop machen, Oder wie bekomme ich den wert wo ich die Maus wieder losslasse so das ich daraus dann einen Copiebefehl machen kann. Ich weis vom Ansatz her nicht mehr weiter.

:oops:

Verfasst: 08.06.2007 02:03
von ts-soft

Code: Alles auswählen

      ElseIf event = #PB_Event_GadgetDrop
       
        id   = EventGadget()
        text = EventDropText()
       
        AddGadgetItem(id,-1,text)
       
      EndIf 
Der einzige Unterschied ist, das es EventDropFiles() heisst und der übergebene Text durch Chr(10) getrennte Dateinamen enthält, die kannste
mit CopyFile irgendwohin kopieren, wo sie sind steht im Text

Verfasst: 08.06.2007 02:07
von duli
:D Ja jetzt dämmert es mir, danke. Ich such einfach oft viel zu weit, weg.
Danke werde es noch ausprobieren, aber ich glaube das ich nun doch erst mal ein paar Stunden schlaf brauche war ein lehreicher Tag heute für mich.

Grüsse aus der Ostschweiz Duli :allright:

Verfasst: 08.06.2007 02:19
von ts-soft
Hier mal ein simples Beispiel, bitte mit Debugger testen, einfach eine oder
mehrere Dateien aufs Fenster droppen (vom Explorer z.B.)

Code: Alles auswählen

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 200, "DropClient")
  EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
  
  Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_WindowDrop; Drop ereignis auf Fenster
    If EventDropType() = #PB_Drop_Files; Dateien wurden gedropped
      Dateien.s = EventDropFiles(); den String mit den Dateinamen in Variable speichern
      Anzahl = CountString(Dateien, Chr(10)) + 1; Anzahl ermitteln
      For I = 1 To Anzahl
        Debug StringField(Dateien, I, Chr(10)); die einzelnen Datein ausgeben, hier könnte auch kopiert werden
      Next
    EndIf 

  EndIf 
  
  Until Event = #PB_Event_CloseWindow

EndIf 

Verfasst: 08.06.2007 02:32
von duli
hallo ts-soft
Du warst schneller als ich.

hier mal das zwischenresultat von dem was ich begriffen habe.

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(0, #PB_Drop_Files, #PB_Drag_Move)
    EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Move) 
    

   
 Repeat
 event = WaitWindowEvent()
     
     
 If Event = #PB_Event_Gadget And EventGadget() = 1 And EventType() = #PB_EventType_DragStart
      Files$ = ""       
        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        
      DragFiles(Files$)
      
      ElseIf event = #PB_Event_GadgetDrop
       
        id   = EventGadget()
        Dateinamen = EventDropFiles()
       
        AddGadgetItem(id,-1,Dateinamen)
       
      EndIf
     
    Until event = #PB_Event_CloseWindow
   
  EndIf 
Ich weiss das im Bereich

Code: Alles auswählen

ElseIf event = #PB_Event_GadgetDrop
       
        id   = EventGadget()
        Dateinamen = EventDropFiles()
       
        AddGadgetItem(id,-1,Dateinamen)
       
      EndIf

das Programm nicht stimmt. möchte auch gar nicht etwas vorgekautes, sondern möchte es einfach lernen wie gebe ich nun die Werte weiter.

Ich meine verstanden zu haben das ich fest stellen muss wo ich die Maus auf dem zweiten explorergadget loslasse so das das Ziel klar ist wo die Kopie hin geht.
Weiter muss ich nachher einen Dateispeichern befehl erzeugen mit den Werten in der Variable Files$ und dem Zielort. Mir ist dabei nicht klar muss ich dafür z.B. auch eine Schlaufe machen oder geht das auf einen rutsch?

Danke für euere Geduld

Verfasst: 08.06.2007 02:39
von ts-soft
Sieh Dir mein Beispiel an, das enthält nur den Bereich, den Du nicht
verstehst, der Einfachheit wegen ist der Dropempfänger das ganze Fenster
Mit StringField wird der String zerlegt (Trennzeichen ist ja Chr(10))