Unterschied zwischen #PB_Drag_Copy und #PB_Drag_Move

Anfängerfragen zum Programmieren mit PureBasic.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Unterschied zwischen #PB_Drag_Copy und #PB_Drag_Move

Beitrag von dietmar »

Kann mir einer erklären was der Unterschied zwischen #PB_Drag_Copy und #PB_Drag_Move ist? Ausser natürlich das #PB_Drag_Move noch zusätzlich bei DragText().


Code: Alles auswählen

If OpenWindow(0, 200, 200, 430, 220, "Test", #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  ListIconGadget(0, 10 , 10, 200, 200,"Test 1",100)
  ListIconGadget(1, 215, 10, 200, 200,"Test 2",100)  
  EnableGadgetDrop(0, #PB_Drop_Text, #PB_Drag_Move)
  EnableGadgetDrop(1, #PB_Drop_Text, #PB_Drag_Move)
   
  For a = 1 To 6
    AddGadgetItem (0, -1, "Eintrag " + Str(a) + " Liste  1")   
    AddGadgetItem (1, -1, "Eintrag " + Str(a) + " Liste  2")   
  Next
 
  Repeat
  
    WaitWindowEvent = WaitWindowEvent()
    If WaitWindowEvent = #PB_Event_Gadget
      EventGadget = EventGadget()
      
      If EventType() = #PB_EventType_DragStart
        text.s = GetGadgetText(EventGadget)
        DragText(text,#PB_Drag_Move)
      EndIf
      
    ElseIf WaitWindowEvent = #PB_Event_GadgetDrop
      EventGadget   = EventGadget()
      text = EventDropText()     
      AddGadgetItem(EventGadget,-1,text)
    EndIf
    
  Until WaitWindowEvent = #PB_Event_CloseWindow   
EndIf
Ist nicht anderes wie

Code: Alles auswählen

If OpenWindow(0, 200, 200, 430, 220, "Test", #PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  ListIconGadget(0, 10 , 10, 200, 200,"Test 1",100)
  ListIconGadget(1, 215, 10, 200, 200,"Test 2",100)  
  EnableGadgetDrop(0, #PB_Drop_Text, #PB_Drag_Copy)
  EnableGadgetDrop(1, #PB_Drop_Text, #PB_Drag_Copy)
   
  For a = 1 To 6
    AddGadgetItem (0, -1, "Eintrag " + Str(a) + " Liste  1")   
    AddGadgetItem (1, -1, "Eintrag " + Str(a) + " Liste  2")   
  Next
 
  Repeat
  
    WaitWindowEvent = WaitWindowEvent()
    If WaitWindowEvent = #PB_Event_Gadget
      EventGadget = EventGadget()
      
      If EventType() = #PB_EventType_DragStart
        text.s = GetGadgetText(EventGadget)
        DragText(text)
      EndIf
      
    ElseIf WaitWindowEvent = #PB_Event_GadgetDrop
      EventGadget   = EventGadget()
      text = EventDropText()     
      AddGadgetItem(EventGadget,-1,text)
    EndIf
    
  Until WaitWindowEvent = #PB_Event_CloseWindow   
EndIf
oder versteh ich da was falsch?
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Bei #PB_Drag_Copy wird ein kleines + angezeigt um dem User zu zeigen das der
Inhalt kopiert und nicht verschoben wird.

Der Unterschied ist auch wichtig für D+D mit anderen Programmen.
Bei #PB_Drag_Copy muss der "Sender" nichts weiter tun, bei #PB_Drag_Move
ist jedoch der Sender dafür Zuständig die Daten in seinem Programm zu löschen
wenn der Drag erfolgreich war (da der Empfänger sie dann kopiert hat)

Immer die Konstante verwenden die die Aktion korrekt beschreibt, damit
das Programm sich nicht anders verhält als andere Programme die D+D verwenden.

Man kann die Konstanten auch kombinieren um damit dem User die Wahl zu lassen (per Shift/Ctrl Taste)
welche Aktion er ausführen will.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Ja das dacht ich mir auch, steht auch so in der Hilfe aber wenn ich den Code ausführe, einen nah dem anderen seh ich auch das da ein Unterschied im Symbol ist. Allerdings seh ich den Unterschied in der Funktion selbst nicht. Es wird in beiden von links nach rechts kopiert, und nicht verschoben.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Das Verschieben muss man eben selber machen. Die Flags sind nur das Feedback für den User.
Antworten