These work correctly only when each item in the selection list is unique in value.
To move up use:
SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:LOOKUP(SELECT-1:SCREEN-VALUE) - 1).
To move down use:
SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:LOOKUP(SELECT-1:SCREEN-VALUE) + 1).
To move to the first item:
SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(1).
To move to the last item use:
SELECT-1:SCREEN-VALUE = SELECT-1:ENTRY(SELECT-1:NUM-ITEMS).
Changing the position of an item is a bit more difficult. Basically, you need to remove the item from the list and then re-add it at the new position.
In the definitions section, define a variable to hold the current index of the selected item.
DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
To move an item up use:
SELECT-1
RIVATE-DATA = SELECT-1:SCREEN-VALUE.
iIndex = SELECT-1:LOOKUP(SELECT-1
RIVATE-DATA).
SELECT-1
ELETE(SELF
RIVATE-DATA).
SELECT-1:INSERT(SELF
RIVATE-DATA,iIndex - 1).
SELECT-1:SCREEN-VALUE = SELECT-1
RIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.
To move an item down use:
SELECT-1
RIVATE-DATA = SELECT-1:SCREEN-VALUE.
iIndex = SELECT-1:LOOKUP(SELECT-1
RIVATE-DATA).
SELECT-1
ELETE(SELF
RIVATE-DATA).
SELECT-1:INSERT(SELF
RIVATE-DATA,iIndex + 1).
SELECT-1:SCREEN-VALUE = SELECT-1
RIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.
To move an item to the top use:
SELECT-1
RIVATE-DATA = SELECT-1:SCREEN-VALUE.
SELECT-1
ELETE(SELF
RIVATE-DATA).
SELECT-1:INSERT(SELF
RIVATE-DATA,1).
SELECT-1:SCREEN-VALUE = SELECT-1
RIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.
To move an item to the bottom use:
SELECT-1
RIVATE-DATA = SELECT-1:SCREEN-VALUE.
SELECT-1
ELETE(SELF
RIVATE-DATA).
SELECT-1:INSERT(SELF
RIVATE-DATA,SELECT-1:NUM-ITEMS + 1).
SELECT-1:SCREEN-VALUE = SELECT-1
RIVATE-DATA.
APPLY "VALUE-CHANGED" TO SELECT-1.
Note that there's no bounds checking in these examples because usually, you would disable the buttons when the associated function is not valid. For example, when the first item is selected then the 'move-up' and 'move-to-top' buttons should be disabled. You can do this enabling/disabling from the VALUE-CHANGED trigger.