Hola ramphi, para hacer lo que quieres en el ListBox yo utilizo los procedimientos Exchange y Move del ListBox, te dejo un ejemplo, lo acomodas tu a lo que necesitas si te sirve.
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
Indice :Integer;
begin
Indice := ListBox1.ItemIndex;
if ListBox1.ItemIndex > 0 then
ListBox1.Items.Exchange(Indice, Indice-1)
else
begin
ListBox1.Items.Move(Indice,ListBox1.Items.Count-1);
ListBox1.ItemIndex := ListBox1.Items.Count-1;
end;
end;
Saluditos