О, господи!!!
Код:
procedure MoveItemsUp(AListBox : TListBox);
var
I : Integer;
begin
If AListBox.Items.Count > 1 Then
For I := 1 To AListBox.Items.Count-1 Do
If Not AListBox.Selected[I-1] Then
AListBox.Exchange(I,I-1);
end;
Вниз аналогично, только цикл в обратном напрмвлении и проверяешь I+1.
Вроде должно работать.