Seite 1 von 1

Beispiel zu Drag 'n Drop mit PB ab 4.10

Verfasst: 26.06.2007 22:59
von tmjuk
Hallo,

ich habe mich mal mit Drag 'n Drop beschäftigt. In diesem kleinen Beispiel wird gezeigt, wie man ein Treegadget befüllt, sortiert oder Einträge löscht.
Von der linken Liste kann man die Einträge in die rechte Liste ziehen. Man kann das gleich so machen, das die Einträge beliebig sortiert sind. Man kann sie aber auch danach durch Ziehen in der rechten Liste sortieren.
Zieht man einen Eintrag von der rechten Liste in die Linke, dann wird er einfach aus der rechten Liste entfernt.

Code: Alles auswählen

; Test Drag 'n Drop mit 2 Tree's
OpenWindow(1,30,30,500,500,"Test Drag 'n Drop",#PB_Window_TitleBar | #PB_Window_SystemMenu)

CreateGadgetList(WindowID(1))
    TreeGadget(1,10,10,230,480,#PB_Tree_NoLines)
    TreeGadget(2,260,10,230,480,#PB_Tree_NoLines)
    EnableGadgetDrop(2,#PB_Drop_Text,#PB_Drag_Copy)
    EnableGadgetDrop(1,#PB_Drop_Text,#PB_Drag_Copy)
For i = 1 To 20
    AddGadgetItem(1,-1,"Eintrag " + Str(i))
Next i

Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget
        Select EventGadget()
            Case 1
                If EventType() = #PB_EventType_DragStart
                    text.s = GetGadgetText(1)
                    DragText(text,#PB_Drag_Copy)
                    
                EndIf
            Case 2
                If EventType() = #PB_EventType_DragStart
                    nummer = GetGadgetState(2)
                    text.s = GetGadgetText(2)
                    flag = 1
                    DragText(text,#PB_Drag_Leave)
                EndIf
            
        EndSelect
    EndIf    
    If Event = #PB_Event_GadgetDrop
        
        Select EventGadget()
            Case 1
                If flag = 1
                    RemoveGadgetItem(2,nummer)
                    flag = 0
                EndIf
            Case 2
                If flag = 0
                    nummer = GetGadgetState(2)
                    AddGadgetItem(2,nummer,text,0,0)
                ElseIf flag = 1
                   ; Gezogenen Eintrag löschen
                    RemoveGadgetItem(2,nummer)
                    ; Nummer des Eintrages feststellen, an dem abgeladen wurde
                    nummer = GetGadgetState(2)
                    If nummer > -1
                        AddGadgetItem(2,nummer ,text,0,0)
                    Else
                        AddGadgetItem(2,-1,text,0,0)
                    EndIf
                    flag = 0
                EndIf
                
            EndSelect
    EndIf
Until Event = #PB_Event_CloseWindow

Vielleicht kann da jemand was mit anfangen.

Torsten

Thema verschoben und Titel leicht angepaßt (ts)

Verfasst: 27.03.2008 23:37
von NicTheQuick
Noch ein Beispiel mit einem 'WebGadget()', in das man eine Datei droppen
kann, die dann angezeigt wird.

Code: Alles auswählen

  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    WebGadgetPath("libgtkembedmoz.so", "/usr/lib/firefox/")
  CompilerEndIf
  
  Define File.s
  
  If OpenWindow(0, 0, 0, 800, 600, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget) And CreateGadgetList(WindowID(0))
    WebGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), "")
    EnableGadgetDrop(0, #PB_Drop_Files, #PB_Drag_Link)
    SetGadgetItemText(0, #PB_Web_HtmlCode, "<center><font size=48>Drop File here</font></center>")
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
        
        Case #PB_Event_SizeWindow
          ResizeGadget(0, 0, 0, WindowWidth(0), WindowHeight(0))
        
        Case #PB_Event_GadgetDrop
          Select EventGadget()
            Case 0
              If EventDropType() = #PB_Drop_Files
                File = StringField(EventDropFiles(), 1, Chr(10))
                SetGadgetText(0, "file://" + File)
              EndIf
          EndSelect
      EndSelect
    ForEver
  EndIf

Verfasst: 25.11.2008 17:39
von saimen
kann ich auch von z.b. einer Exceltabelle Drag & Drop in ein Listicongadget machen?

Verfasst: 25.11.2008 18:08
von saimen
ok, musste nurmal sebst probieren und dann wars klar...