Aktuelle Zeit: 21.03.2019 02:13

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Dymamisches verschieben in einer Liste ? (Erledigt)
BeitragVerfasst: 10.03.2019 10:24 
Offline
Benutzeravatar

Registriert: 06.07.2014 12:21
Hallo Leute,
ich bin es mal wieder, habe da ein Problem wo ich nicht richtig weiter komme.
Ich möchte gerne in einer Liste einen Eintrag Dynamisch verschieben (ein Element greifen und dann in der Liste hoch und runter bewegen)
Bild
wobei sich die anderen Elemente in der listen optisch der verschiebung anpassen (wenn Element 2 ausgewähl ist und richtung 3 verschoben wird sollte 3 dann an die Position von 2 rutschen genauso halt anderes herum).
Ich hoffe das ich das verständlich erklärt habe, und ihr mir da auf die sprünge helfen könnt.

Gruß Silbersurfer

_________________
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.60 LTS / Aktuelles Projekt PureCommander


Zuletzt geändert von silbersurfer am 16.03.2019 12:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 11:19 
Offline
Benutzeravatar

Registriert: 21.08.2006 17:39
Hi,

womit willst du das machen? Gadget (Desktop) oder Sprites (Screen)?

Bei letzterem sollte es recht einfach sein:
- Liste zeichnen
- bei Mausklick (halten) aktuelle Position ermitteln
- Eintrag auslesen und optisch an die Maus pinnen (Liste aber nicht verändern!)
- ständig die Mausposition ermitteln
- wenn diese die absoluten Grenzen eines anderen Eintrages überfährt oder in der relativen Bewegung (bezogen auf die Position des ersten Klicks) n*Eintraghöhe übersteigt (auch negativ), dann tauschst du erst den gegriffenen Eintrag mit dem aktuell von der Maus berührten "n".
(Code wäre via Handy jetzt zu aufwändig ;) )

MFG
MIB

_________________
(hab alles, kann alles, weiß alles!!^^)

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 11:33 
Offline
Benutzeravatar

Registriert: 06.07.2014 12:21
@man-in-black
Zitat:
Bei letzterem sollte es recht einfach sein:


ja so in etwa meinte ich das
Zitat:
den gegriffenen Eintrag mit dem aktuell von der Maus berührten "n".

wenn ich das richtig verstehe, der listeintrag befindet sich auf position 2 verschiebe ich diesen auf 3 dann tauschen? aber was wenn ich über 4 bin,
dieser soll nicht auf die Position 2 springen sondern sollte dann auf die position von 3 springen oder habe ich das jetzt falsch verstanden

_________________
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.60 LTS / Aktuelles Projekt PureCommander


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 13:12 
Offline
Benutzeravatar

Registriert: 21.08.2006 17:39
Hi.

guter Einwand. Das Rutschen habe ich vergessen. Wenn du Start und Ziel kennst,
kannst du via For-Schleife (i von Start zu Ziel-1) zwei benachbarte Elemente tauschen:

Code:
speicher = liste(start)
for i ...
liste (i) = liste (i+1)
next
liste(ziel) = speicher


MFG
MIB

_________________
(hab alles, kann alles, weiß alles!!^^)

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 15:19 
Offline
Benutzeravatar

Registriert: 06.07.2014 12:21
@man-in-black
Zitat:
guter Einwand. Das Rutschen habe ich vergessen. Wenn du Start und Ziel kennst

ja das sieht gut aus werde das gleich mal ausprobierén, danke für den Tip man-in-black :allright: :allright:

_________________
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.60 LTS / Aktuelles Projekt PureCommander


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 15:36 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Vielleicht kannst du damit was anfangen:
https://www.purebasic.fr/english/viewtopic.php?f=12&t=61911


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 15:41 
Offline

Registriert: 15.10.2004 17:42
Wäre das nicht ein typischer Fall für Drag & Drop ?

Als Aktion wird dann #PB_Drag_Move verwendet.

_________________
PB 5.60


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 17:08 
Offline
Benutzeravatar

Registriert: 06.07.2014 12:21
super nice, genau sowas meinte ich danke Josh :allright: :allright: :allright:

@H.Brill
Zitat:
Wäre das nicht ein typischer Fall für Drag & Drop ?

hast du einen code-schnipsel der das optische bewegen Demonstriert ?
Kann da jetzt noch keinen Ansatz daraus erkennen.

_________________
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.60 LTS / Aktuelles Projekt PureCommander


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 10.03.2019 19:17 
Offline

Registriert: 15.10.2004 17:42
Da müßte ich jetzt selber schauen.
Aber da gibt es im Forum auch genügend Beispielcodes
dazu.
z.B. das hier :

Code:

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

Procedure ListViewGadgetMove(gad.i, Source.i, Dest.i)
  Protected i, Help$, Source$
  Source$ = GetGadgetItemText(gad, Source)
  If Source < Dest
    For i = Source To Dest - 1
      Help$ = GetGadgetItemText(gad, i + 1)
      SetGadgetItemText(gad, i, Help$)
    Next
  Else
    For i = Source To Dest + 1 Step - 1
      Help$ = GetGadgetItemText(gad, i - 1)
      SetGadgetItemText(gad, i, Help$)
    Next
  EndIf
  SetGadgetItemText(gad, i, Source$)
EndProcedure

OpenWindow(0, 0, 0, 600, 600, "Drag'n drop test", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

; ContainerGadget is more for testing only (if the Drag'n'Drop also works, if the related gadgets are placed inside)
gad = ContainerGadget(#PB_Any, 5, 5, 460, 265, #PB_Container_Double)
     
listicon = ListIconGadget(#PB_Any, 10, 10, 440, 240, "Test 1", 100 , #PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(listicon, 1, "Test 2", 100)
AddGadgetColumn(listicon, 2, "Test 3", 100)
AddGadgetColumn(listicon, 3, "Test 4", 100)
For i = 1 To 10
  AddGadgetItem(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")
Next i
CloseGadgetList()  ;Remember to close the GadgetList()
EnableGadgetDrop(Listicon, #PB_Drop_Private, #PB_Drag_Move, 1)

button = ButtonGadget(#PB_Any, 520, 15, 50, 24,"TEST")

Exit = #False
DragItem = -1

Repeat
  Event = WaitWindowEvent()
  EventType = EventType()
  EventGadget = EventGadget()
 
  Select Event
    Case #PB_Event_Gadget
     Select EventGadget()
       Case button
        listicon2 = ListIconGadget(#PB_Any, 10, 340, 440, 240, "Test 1", 100 , #PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop)
        AddGadgetColumn(listicon2, 1, "Test 2", 100)
        AddGadgetColumn(listicon2, 2, "Test 3", 100)
        AddGadgetColumn(listicon2, 3, "Test 4", 100)
        For i = 1 To 10
          AddGadgetItem(listicon2, -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")
        Next i
        EnableGadgetDrop(Listicon2, #PB_Drop_Private, #PB_Drag_Move, 1)


       Case listicon,listicon2
        Select EventType
          Case #PB_EventType_DragStart
            DragItem = GetGadgetState(EventGadget)
            DragPrivate(1, #PB_Drag_Move)
        EndSelect
     EndSelect
       
    Case #PB_Event_GadgetDrop
      EventGadget = GetActiveGadget()
      If EventDropPrivate() = 1
        TargetItem = GetGadgetState(EventGadget)
        ; Debug "Target: " + Str(TargetItem)
        If EventGadget = listicon Or EventGadget = listicon2
          ListIconGadgetMove(EventGadget, DragItem, TargetItem)
        EndIf
      EndIf
         
         
    Case #PB_Event_CloseWindow
      Exit = #True
  EndSelect
 
Until Exit

_________________
PB 5.60


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Dymamisches verschieben in einer Liste ?
BeitragVerfasst: 16.03.2019 10:00 
Offline
Benutzeravatar

Registriert: 06.07.2014 12:21
@H.Brill
Zitat:
z.B. das hier :

Sorry H.Brill, das war mit meiner Frage nicht gemeint, hier ging es um Linked lists und deren Optischen Verschiebung wie es Josh sein Code zeigt,
bin gerade dabei Josh seinen Code für meine zwecke anzupassen (an dieser stelle nochmals danke Josh)

Edit: dank Josh habe ich das jetzt für mich umsetzen können :-)

Siehe:
Bild

_________________
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.60 LTS / Aktuelles Projekt PureCommander


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye