| |
|
|
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" per 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 ! |
|
|
| |
|
|