Seite 1 von 1

Neue Funktion Drag und Drop

Verfasst: 07.06.2007 15:49
von duli
Hallo Zusammen hier bin ich wieder, freue mich das in der Beta PB4.10 nun die Drag und Drop Befehle drin sind. Aber irgendwie stelle ich mich etwas doof an.
Ich habe im Englischen Forum von ts-soft eine schöne anwendung diesbezüglich gesehen, super. Aber dennoch bei den Kernfragen komme ich nicht weiter, jetzt habe ich den Code aus der Hilfe genommen und ihn kommentiert, so dass man sehen kann was ich verstanden habe und wo es bei mir noch hängt, wäre echt froh wenn ihr mir bei meinen Fragen im Code auf die Sprünge helfen könntet.

Code: Alles auswählen

  ; Wählen Sie einige Dateien oder Ordner und ziehen Sie diese zu einer anderen Applikation
  ;
  If OpenWindow(1, 200, 200, 400, 400, "Drag & Drop", #PB_Window_SystemMenu) ;öffnet ein fenster
  
    CreateGadgetList(WindowID(1))   ;aktiviert die Gadgets
    
    ExplorerListGadget(1, 10, 10, 380, 380, "*", #PB_Explorer_MultiSelect) ;öffnet ein Explorerfeld als Gadget
  
    Repeat     ;beginn der Programmschlaufe
    
      Event = WaitWindowEvent() ;das ergebniss vom Event in die Variable Event
         
      If Event = #PB_Event_Gadget And EventGadget() = 1 And EventType() = #PB_EventType_DragStart  ; Ich versteh diese Gleichung nicht.
      ;Jedoch bewirckt sie das wenn der Drag ausgelöst wurde folgendes gemacht wird.
      
        Files$ = ""    ;die Variabel Files$ wird geleert  
        
        For i = 0 To CountGadgetItems(1)-1 ;da mehr als eine Datei oder ein Verzeichnis ausgewähl
         ;sein können werden hier in einer Schlaufe die Werte jedes Verzeinisses und der Dateien aufgearbeitet
        
          If GetGadgetItemState(1, i) & #PB_Explorer_Selected   ;verstehe die Gleichung nicht, was ist ein GetGadgetItemState
            ; das einzige was ich verstanden habe ist der Wert ist ist der Wert des Zählers der Schlaufe. Und das 1 muss der 
            ;Konstantenwert sein
          
          
            Files$ + GetGadgetText(1) + GetGadgetItemText(1, i) + Chr(10) ;hier wird in einer Schlaufe die Variable Files$
             ;so zusammengefügt wie es  nötig ist in einer Variable
            
          EndIf
          
        Next i    ;Schlaufe geht wieder an Anfang     
        
        DragFiles(Files$) ;startet das Drag und Drop wobei mir nicht klar ist was alles in dem Befehl gemacht wird.
        
      EndIf      
      
    Until Event = #PB_Event_CloseWindow  ;beendet das Programm
    
  EndIf


Verfasst: 07.06.2007 15:59
von ts-soft
>> DragFiles(Files$) ;startet das Drag und Drop wobei mir nicht klar ist was alles in dem Befehl gemacht wird.
Nichts weiter, den Rest macht die Anwendung welche die Daten erhält, also
wo Du den Mauszeiger losläßt. Vorraussetzung ist natürlich das die andere
Anwendung dafür ausgelegt ist Files zu empfangen (Explorer z.B.)

Verfasst: 07.06.2007 16:45
von duli
Danke für die prompte Antwort.

Könntest Du mir noch bei der erleuchtung von dieser Zeile geben, wäre echt super, danke.

Code: Alles auswählen

If Event = #PB_Event_Gadget And EventGadget() = 1 And EventType() = #PB_EventType_DragStart 

Verfasst: 07.06.2007 16:48
von ts-soft
Das solltest Du kennen, lediglich der EventType #PB_EventType_DragStart
ist Neu und bedeutet das der User was ziehen möchte.

Verfasst: 07.06.2007 16:59
von duli
Also wenn ich das richtig verstehe wird verglichen ob die Konstanten von #PB_Event_Gadget und EventGadget() jeweils den Wert 1 haben müssen, aber auch noch gleichzeitig muss EventType() und #PB_EventType_DragStart einfach den gleichen Konstanten wert haben.
OK so weit so gut aber für mich bleibt es ein Rätsel, wiso muss ich das normale Gadget event und das spetziele Drag event gleichzeitig abfragen ist ja eh immer bei 1 oder nicht??
Und bei dem zweiten Teil wiso muss der Typ vom draggadget mit dem wert von Dragtype_start übereinstimmen? Ist das weil es bei mehreren Drag und drops die zur gleichen Zeit am laufen sind keine verwechslungen gibt oder warum? :freak:

Danke für Deine Geduld und Erklärungen

Verfasst: 07.06.2007 17:05
von ts-soft

Code: Alles auswählen

EventGadget() = 1 ; ExplorerListGadget wurde mit der ID 1 erstellt
EventType() = #PB_EventType_DragStart ; Ist das Ereignis auf dieses Gadget eine DragAktion?

Verfasst: 07.06.2007 17:10
von duli
Danke vielmals, jetzt hat es bei mir geleuchtet. :allright:

Super, aber darauf warum auch immer wäre ich nicht gekommen. :oops:

Somit danke ich euch für euer Geduld und hilfe.

Gruss Duli