Reihenfolge im ListIconGadget per Dra'n'Drop ändern

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Reihenfolge im ListIconGadget per Dra'n'Drop ändern

Beitrag von Ghosty1967 »

Hallo Leutz...
Ich habe ein ListIcon, welches ich mit

Code: Alles auswählen

ListIconGadget(#list_programme,6,28,178,241,"",#PB_Ignore)
ChangeListIconGadgetDisplay(#list_programme,#PB_ListIcon_SmallIcon)
...
erstellt habe. Hierin werden diverse Programme mit Ihren Icons angezeigt.
Nun möchte ich gerne die reihenfolge der Einträge innerhalb des ListIcons
mit der Maus per Drag'n'Drop ändern.
Ich habe mir schon diverse Codebeispiele in den Foren angeschaut, finde aber
leider immer nur Beispiele um von einem ListIcon in ein anderes zu "droppen".
:oops: Könnte mir jemand mal unter die Arme greifen und mir weiterhelfen...
alles was ich bis jetzt versucht habe, klappert nicht so richtig!!!

Thx...
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Hier ein kleines Beispiel für Text. Kannst das ja umbauen auf deine Icons und noch entwas den Code aufräumen, das ist jetzt nur mal so hingeschmiert.

Prinzip:
Beim Drag&Drop-Start die Position des Eintrags merken und beim "Loslassen" an der aktuellen Position (Auswahl aktualisiert sich ja beim Ziehen) einfügen, den alten Eintrag dann aber löschen, sonst wirds ja kopiert und nicht verschoben.

Code: Alles auswählen

EnableExplicit

#app = "Test"

#width = 200
#height = 300

Define event.l
Define i.l
Define pos.l

Enumeration
  #list
EndEnumeration

OpenWindow(0,0,0,#width,#height,#app,#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)

CreateGadgetList(WindowID(0))

ListIconGadget(#list,0,0,200,300,"",#PB_Ignore)
ChangeListIconGadgetDisplay(#list,#PB_ListIcon_List)

EnableGadgetDrop(#list,#PB_Drop_Text,#PB_Drag_Copy)

For i = 1 To 30
  AddGadgetItem(#list, -1, "Eintrag "+Str(i))
Next

Repeat  
  event = WaitWindowEvent()
  Select event
    Case 0
      Delay(1)
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      If EventType() = #PB_EventType_DragStart
        Select EventGadget()
          Case #list
            pos = GetGadgetState(#list)
            DragText(GetGadgetItemText(#list,GetGadgetState(#list)))
        EndSelect
      EndIf
    Case #PB_Event_GadgetDrop
      Select EventGadget()
        Case #list
          AddGadgetItem(#list,GetGadgetState(#list),EventDropText())
          If GetGadgetState(#list) <= pos
            RemoveGadgetItem(#list,pos+1)
          Else
            RemoveGadgetItem(#list,pos)
          EndIf
      EndSelect
  EndSelect
ForEver

End
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Noch ne kleine Anmerkung:
Du solltest evtl. als D&D-Type nicht Text sondern Private nehmen, damit nichts durcheinander kommt wenn der Anwender Drag&Drop von oder nach einem externen Programm versucht.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

vorerst mal danke, werde ich jetzt erst einmal ausprobieren... :allright:
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Das Beispiel funktioniert zwar, wenn die Gadget-Eigenschaft ChangeListIconGadgetDisplay auf #PB_ListIcon_List steht,
nicht jedoch, wenn ich diese auf #PB_ListIcon_SmallIcon setze.
Das muß doch irgendwie gehen, in div. Anwendungen sieht man doch sowas andauernd :(
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

Hab mir mal paar Werte mit dem Debugger ausgeben lassen und rausgefunden das es scheinbar an der Sortierung der Icons liegt, also Drag-n-Drop scheint zu gehen, aber die Anzeige bleibt gleich.

Hab aber noch keine Lösung gefunden.

Vielleicht wäre folgendes möglich:
Speichere beim Drag-Event die Startposition des gezogenen Eintrags. Speichere beim Drop-Event dann ebenfalls die Zielposition. Jetzt kannst du alle deine Icons in ein Array, LinkedList, etc. rausschreiben, dort manuell umsortieren (Quell- und Zielposition kennst du ja jetzt) und danach die Icon-Liste leeren und aus dem Array/LinkedList/Etc. zurückschreiben, in der von dir festgelegten Reihenfolge.

Was anderes fällt mir grad nicht ein.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Beitrag von Ghosty1967 »

Netter Tipp, hab iich schon gemacht...
...allerdings möchte ich ja am liebsten auch noch nen dragbaren "Ghost" der Datei haben /:-> .
Antworten