Seite 1 von 1

explorerlistgadget

Verfasst: 27.11.2004 14:39
von Buggymonkey
Hi,
hab mal nee frage:
wie kann ich, wenn ich 2 explorerlistgadgets habe, Daten vom einem ins andere ziehen, so das sie dahin kopiert werden???

Danke schon für die antworten

PS: wer rechtschreibfehler findet kann sie behalten!!! :D

Verfasst: 27.11.2004 18:05
von walker
Hi,

schau mal in der PureArea.net nach... da gibt's ein Beispiel dafür
(zuminest für's ListIconGadget... dürfte aber nicht schwer anzupassen sein)

cu

Verfasst: 27.11.2004 18:51
von Buggymonkey
walker hat geschrieben: zuminest für's ListIconGadget... dürfte aber nicht schwer anzupassen sein
ich bekomme es aber einfach nicht hin, enabledrop gibt zwar 1 zurück ich kann aber nicht droppen???

hier nochmal der code:

Code: Alles auswählen

; English forum: http://purebasic.myforums.net/viewtopic.php?t=7022&highlight=
; Author: LJ
; Date: 26. July 2003


; German forum: 
; Author: Freak (Timo Harter) 
; Date: 17. December 2002 
; Modified for use with ListGadget by Lance Jepsen (Sorted) 
; Date: 15. July 2003 

; -------------------------------------------------------------------------- 
; Drag'n' Drop mit TreeGadgets 
; by Timo Harter 
; 
; Syntax: 
; EnableDragDrop( #Gadget, DragMode, @DropProcedure() ) 
; 
; 
; DragMode : #Drag_LeftMouse  
;            #Drag_RightMouse 
; 
; @DropProcedure() 

;            Procedure DropProcedure(X.l, Y.l, Button.l, Item.l) 
; 


#TVN_BEGINDRAG       = -407 
#TVN_BEGINRDRAG      = -408 
#TVS_DISABLEDRAGDROP = $10 
#Drag_LeftMouse  = 1 
#Drag_RightMouse = 2 
#ListIcon = 3 

Global hWndTV.l, DropProc.l, DragDropMode.l, hDragIml.l, DragItem.l 

Procedure.l DragDropCallback(Window.l, Message.l, wParam.l, lParam.l) 
  Protected DoDrag.l, DropX.l, DropY.l, hItem.l, hItem2.l, dItem.l 
  result = #PB_ProcessPureBasicEvents 
  Select Message 
    Case #WM_NOTIFY 
      *lp.NMHDR = lParam 
      If *lp\code = #TVN_BEGINDRAG And (DragDropMode & #Drag_LeftMouse): DoDrag = #True: EndIf 
      If *lp\code = #TVN_BEGINRDRAG And (DragDropMode & #Drag_RightMouse): DoDrag = #True: EndIf 
      If DoDrag 
        *pnmtv.NMTREEVIEW = lParam 
        DragItem = *pnmtv\itemNew\hItem 
        hDragIml = SendMessage_(hWndTV, #TVM_CREATEDRAGIMAGE, 0, DragItem) 
        SendMessage_(hWndTV, #TVM_SELECTITEM, #TVGN_CARET, #NULL) 
        ImageList_BeginDrag_(hDragIml, 0, 0, 0) 
        ImageList_DragEnter_(GetParent_(hWndTV), 0, 0) 
        ImageList_DragShowNolock_(#TRUE) 
        ImageList_DragLeave_(hWndTV) 
        ShowCursor_(#FALSE) 
        SetCapture_(GetParent_(hWndTV)) 
        SendMessage_(hWndTV, #TVM_SELECTITEM, #TVGN_CARET, DragItem) 
      EndIf 
    Case #WM_MOUSEMOVE 
        If hDragIml 
          DropX = PeekW(@lParam) 
          DropY = PeekW(@lParam+2) 
          ImageList_DragMove_(DropX, DropY+20) 
          ImageList_DragShowNolock_(#FALSE) 
          ImageList_DragShowNolock_(#TRUE) 
        EndIf 
    Case #WM_LBUTTONUP 
        If hDragIml And (DragDropMode & #Drag_LeftMouse) 
          ImageList_EndDrag_() 
          ReleaseCapture_() 
          ShowCursor_(#TRUE) 
          ImageList_Destroy_(hDragIml) 
          hDragIml = #false 
          dItem = 0 
          hItem = SendMessage_(hWndTV, #TVM_GETNEXTITEM, #TVGN_ROOT, 0) 
          While hItem <> DragItem 
            hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem) 
            Repeat 
              If hItem2 = #NULL: hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem): EndIf 
              If hItem2 = #NULL: hItem = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem): EndIf 
            Until hItem2 <> #NULL 
            hItem = hItem2 
            dItem + 1 
          Wend 
          CallFunctionFast(DropProc, WindowMouseX(), WindowMouseY(), #Drag_LeftMouse, dItem) 
        EndIf 
    Case #WM_RBUTTONUP 
        If hDragIml And (DragDropMode & #Drag_RightMouse) 
          ImageList_EndDrag_() 
          ReleaseCapture_() 
          ShowCursor_(#TRUE) 
          ImageList_Destroy_(hDragIml) 
          hDragIml = #false 
          dItem = 0 
          hItem = SendMessage_(hWndTV, #TVM_GETNEXTITEM, #TVGN_ROOT, 0) 
          While hItem <> DragItem 
            hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_CHILD, hItem) 
            Repeat 
              If hItem2 = #NULL: hItem2 = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_NEXT, hItem): EndIf 
              If hItem2 = #NULL: hItem = SendMessage_(hwndTV, #TVM_GETNEXTITEM, #TVGN_PARENT, hItem): EndIf 
            Until hItem2 <> #NULL 
            hItem = hItem2 
            dItem + 1 
          Wend 
          CallFunctionFast(DropProc, WindowMouseX(), WindowMouseY(), #Drag_RightMouse, DragItem)          
        EndIf 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

Procedure.l EnableDragDrop(TVGadget.l, DragMode.l, DropProcedure.l) 
  Protected Style.l, hIml.l 
  hWndTV = GadgetID(TVGadget) 
  DropProc = DropProcedure 
  DragDropMode = DragMode 
  Style = GetWindowLong_(hWndTV, #GWL_STYLE) 
  Style = Style & (~#TVS_DISABLEDRAGDROP) 
  SetWindowLong_(hWndTV, #GWL_STYLE, Style) 
  If SendMessage_(hWndTV, #TVM_GETIMAGELIST, #TVSIL_NORMAL, 0) = #NULL 
    hIml = ImageList_Create_(16,16,#ILC_COLOR8,0,999) 
    SendMessage_(hWndTV, #TVM_SETIMAGELIST, #TVSIL_NORMAL, hIml) 
  EndIf 
  SetWindowCallback(@DragDropCallback()) 
  ProcedureReturn #True 
EndProcedure 

Procedure DropProcedure(X.l, Y.l, Button.l, Item.l) 
If Button = #Drag_LeftMouse 
  If x > 212 And x < 310 
     If y > 45 And y < 273 
      
        AddGadgetItem(#ListIcon,-1,"Item"+Str(Item)) 
         NbElements = CountGadgetItems(#ListIcon) 
         Dim Array.s(NbElements) 
         For k=0 To NbElements 
         Array(k) = GetGadgetItemText(#ListIcon, k,0) 
         Next 
         SortArray(Array(), 2, 0, NbElements) 
         ClearGadgetItemList(#ListIcon) 
         For k= 1 To NbElements 
         AddGadgetItem(#ListIcon, k, Array(k)) 
         Next 
          
     EndIf 
  EndIf 
EndIf 

; Un-REM (take off ";" in lines below when you need to determine X and Y coordinates of drop 
;  If Button = #Drag_LeftMouse 
;    MessageRequester("Drag'n Drop","Item Number "+Str(Item)+" has been dropped at X:"+Str(X)+" Y:"+Str(Y)+" using left Button.",#MB_ICONINFORMATION) 
;  Else 
;    MessageRequester("Drag'n Drop","Item Number "+Str(Item)+" has been dropped at X:"+Str(X)+" Y:"+Str(Y)+" using right Button.",#MB_ICONINFORMATION) 
;  EndIf 
EndProcedure 

#Tree = 1 

OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_Screencentered, "Drag'n Drop") 
CreateGadgetList(WindowID()) 

TreeGadget(#Tree, 5, 5, 150, 250) 
hImg = LoadIcon_(0,#IDI_APPLICATION) 
AddGadgetItem(#Tree, 0, "Item3", hImg) 
AddGadgetItem(#Tree, 0, "Item2") 
OpenTreeGadgetNode(#Tree) 
  AddGadgetItem(#Tree, 0, "Item1") 
  AddGadgetItem(#Tree, 0, "Item0") 
CloseTreeGadgetNode(#Tree) 

ListIconGadget(#ListIcon,250,5, 80, 250, "Item Dropped", 76) 

EnableDragDrop(#Tree, #Drag_LeftMouse|#Drag_RightMouse, @DropProcedure()) 

While WaitWindowEvent() <> #PB_EventCloseWindow: Wend 
End 

; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; EOF

Verfasst: 27.11.2004 19:26
von orange-blue
Komisch bei mir funktionierts!

Verfasst: 27.11.2004 20:04
von Kaeru Gaman
@orange & buggy:

welche windows-versionen? :wink:

Verfasst: 27.11.2004 20:06
von orange-blue
Aso! winxp...

Verfasst: 27.11.2004 20:07
von Buggymonkey
ich ahhbe windows XP prfessional,

der code der da oben steht funcst bei mir auch, aber nicht mehr wenn ich das treegadget mit einem explorergadget austausche!!!

danke für die hilfe

Verfasst: 28.11.2004 18:09
von freak
http://freak.purearea.net/help/

Das oberste Tutorial.

Verfasst: 28.11.2004 18:29
von Andre
@freak: :allright:

Werds auch mit ins CodeArchiv aufnehmen, wenn Du nix dagegen hast.

Deine Tools wären übrigens auch etwas für den Showcase.... :wink: