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.

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

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.

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

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

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))