Listicon Drag & Drop

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Listicon Drag & Drop

Beitrag von Velindos »

Hallo Leute,
wie nimmt der das richtige Image mit in die Zeile bei Drag&Drop im Listicon!

Code: Alles auswählen

Enumeration: #Window: #Work_ListIcon:EndEnumeration
Enumeration: #positiv: #negativ:EndEnumeration
Global Durchlauefer = 0
CreateImage(#positiv, 16,16,24,$8849C7)
CreateImage(#negativ, 16,16,24,$884954)
Procedure ListIconGadgetColumns(GadgetNo)
i = 0
While GetGadgetItemAttribute(GadgetNo, 0, #PB_ListIcon_ColumnWidth, i) > 0
  i + 1
Wend
ProcedureReturn i
EndProcedure

Procedure ListIconGadgetMove(GadgetNo.i, Source.i, Dest.i)
Columns = ListIconGadgetColumns(GadgetNo) - 1
For j = 0 To Columns
  Source$ = GetGadgetItemText(GadgetNo, Source, j)
  If Source < Dest
   For i = Source To Dest - 1
    Help$ = GetGadgetItemText(GadgetNo, i + 1, j)
    SetGadgetItemText(GadgetNo, i, Help$, j)
   Next i
  Else
   For i = Source To Dest + 1 Step - 1
    Help$ = GetGadgetItemText(GadgetNo, i - 1, j)
    SetGadgetItemText(GadgetNo, i, Help$, j)
   Next i
  EndIf
  SetGadgetItemText(GadgetNo, i, Source$, j)
Next j
EndProcedure

OpenWindow(#Window, 0, 0, 600, 400, "Dragn drop test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

ListIconGadget(#Work_ListIcon, 10, 10, 580, 380, "Test 1", 150 , #PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(#Work_ListIcon, 1, "Test 2", 150)
AddGadgetColumn(#Work_ListIcon, 2, "Test 3", 120)
AddGadgetColumn(#Work_ListIcon, 3, "Test 4", 120)

For i = 1 To 10
  If Durchlauefer = 0
    AddGadgetItem(#Work_ListIcon, -1, "Line " + Str(i) + " Col 1" + Chr(10) + "Line " + Str(i) + " Col 2"+  Chr(10) + "Line " + Str(i) + " Col 3" + Chr(10) + "Line " + Str(i) + " Col 4",ImageID(#positiv))
    Durchlauefer = 1
  Else
    AddGadgetItem(#Work_ListIcon, -1, "Line " + Str(i) + " Col 1" + Chr(10) + "Line " + Str(i) + " Col 2"+  Chr(10) + "Line " + Str(i) + " Col 3" + Chr(10) + "Line " + Str(i) + " Col 4",ImageID(#negativ))
    Durchlauefer = 0
  EndIf
Next i

EnableGadgetDrop(#Work_ListIcon, #PB_Drop_Private, #PB_Drag_Move, 1)

Exit = #False
DragItem = -1

Repeat
WindowWaitEvent = WaitWindowEvent()

Select WindowWaitEvent
  Case #PB_Event_Gadget
    Select EventType()
      Case #PB_EventType_DragStart
        DragItem = GetGadgetState(#Work_ListIcon)
        DragPrivate(1, #PB_Drag_Move)
    EndSelect
    
  Case #PB_Event_GadgetDrop
    If EventDropPrivate() = 1
      TargetItem = GetGadgetState(#Work_ListIcon)
      ListIconGadgetMove(#Work_ListIcon, DragItem, TargetItem)
    EndIf
    
  Case #PB_Event_CloseWindow
    Exit = #True
    
EndSelect

Until Exit

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Listicon Drag & Drop

Beitrag von Andesdaf »

Du suchst SetGadgetItemImage().

Da es kein GetGadgetItemImage() gibt (wieso eigentlich nicht?), würde ich die Image-Nummer per
SetGadgetItemData() mit dem Eintrag speichern und bei Bedarf (= Drop-Aktion) zusammen mit dem Text aktualisieren.
Win11 x64 | PB 6.20
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Listicon Drag & Drop

Beitrag von RSBasic »

Andesdaf hat geschrieben:Da es kein GetGadgetItemImage() gibt (wieso eigentlich nicht?)
Gute Frage, normalerweise hat man bei allen Anderen immer eine Get- und Set-Funktion.

Falls jemand diesen Feature-Wunsch im englischen Forum posten möchte, dann ist das nicht notwendig, weil so ein Thread bereits existiert: http://www.purebasic.fr/english/viewtop ... =3&t=54573
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten