|  | 
|   | 
 | 
  Georg Teles | Guten Morgen,
  fand hierzu nicht wirklich was ausser viele gute Drag & Drop Beispiele mit Listen hier  [...]   - habe provisorisch dazu ein "Einträge-schiebe-Workarea" für GridBoxen m.H. von LvSelect gebastelt  
  Servus
 
 EDIT: wie immer nicht ganz perfekt, wenn man zwischen UP & DOWN wechselt, springen die Einträge um 2 Positionen, pfeile mal weiter daran ...
  EDIT: Hier funktionierende Version, ganz ohne LvSelect
  $H Commctrl.ph
Declare grid&
Declare up&, down&
CLS
'unsortierte Grid weil sonst dieses Workarea keinen Sinn ergibt ;D
grid& = Create("GridBox", %HWnd, "Links;0;180;Mitte;2;100;Rechts;1;80", 0, 5, 5, 400, 200)
AddString(grid&,"1|1|1")'Testeiträge
AddString(grid&,"2|2|2")
AddString(grid&,"3|3|3")
AddString(grid&,"4|4|4")
AddString(grid&,"5|5|5")
AddString(grid&,"6|6|6")
AddString(grid&,"7|7|7")
up& = Create("Button",%HWnd,"UP",5,220,100,20)
down& = Create("Button",%HWnd,"DOWN",115,220,100,20)
While 1
    CheckStat()'Buttons de-/ aktivieren
    waitinput
    If Clicked(up&)
        moveUP()
    ElseIf Clicked(down&)
        moveDOWN()
    EndIf
EndWhile
Proc CheckStat
    If GetCount(grid&) > 0
        EnableWindow up&,1
        EnableWindow down&,1
    Else'wenn Liste leer, deaktiviere Buttons !
        EnableWindow up&,0
        EnableWindow down&,0
    EndIf
    If GetSelCount(grid&) = 1
        EnableWindow up&,1
        EnableWindow down&,1
    Else'wenn mehrere Einträge markiert sind, deakiviere Buttons !
        EnableWindow up&,0
        EnableWindow down&,0
    EndIf
EndProc
Proc moveUP
    Declare tx$, pos&
    If GetCurSel(grid&) > 0'wenn nicht erste Position bzw. nicht Pos. = 0 angeklickt wurde, dann ...
        pos& = GetCurSel(grid&)'... position auslesen
        tx$ = GetString$(grid&,pos&)'Eintrag der Position speichern - WICHTIG: GetString$ verwenden da
        'GetText$ nur die erste Spalte ausließt - GetString$ ließt komplette Zeile aus
        DeleteString(grid&,pos&)'alten Eintrag löschen ...
        InsertString(grid&,(pos&-1),tx$)'... an Position MINUS 1 hiinzufügen
        tx$ = SubStr$(tx$,1,"|")'bei Grid mit 1 Spalte & Listbox nicht nötig
        SelectString(grid&,-1,tx$)'bei Grid mit 1 Spalte & Listbox nicht nötig
        SetFocus(grid&)'Fokus auf Grid damit Button nicht deaktiviert wird s. Proc CheckStat
    EndIf
EndProc
Proc moveDOWN
    Declare tx$, pos&
    If (GetCurSel(grid&) < (GetCount(grid&)-1)) & (GetCurSel(grid&) >= 0)'wenn Pos. zwischen 1. (pos=0) und letztem Eintrag ist, dann ...
        pos& = GetCurSel(grid&)'... position auslesen
        tx$ = GetString$(grid&,pos&)'Eintrag der Position speichern - WICHTIG: GetString$ verwenden da
        DeleteString(grid&,pos&)'alten Eintrag löschen ...
        InsertString(grid&,(pos&+1),tx$)'... an Position PLUS 1 hiinzufügen
        tx$ = SubStr$(tx$,1,"|")'bei Grid mit 1 Spalte & Listbox nicht nötig
        SelectString(grid&,-1,tx$)'bei Grid mit 1 Spalte & Listbox nicht nötig
        setfocus(grid&)'Fokus auf Grid damit Button nicht deaktiviert wird s. Proc CheckStat
    EndIf
EndProc
 |  
  | 
|   | 
 |  | 
|   | 
 
 
  | 
 | 
  Georg Teles | Vorhin ein kleiner Fehler gewesen, daher sprang er um 1-2 Zeilen ... bei Grids mit mehr als 2 Spalten muss beachtet werden, dass beim Selektieren der Zeile nur nach erster Spalte gesucht wird ! daher
  das war mein Denkfehler vorhin und er gab mit bei GetCurSel -1 zurück   aber jetzt ist der Code sauber ! |  
  | 
|   | 
 |  | 
|   | 
 
 
  |