我已实现了。
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
i:integer;
begin
 for i:=0 to listbox2.Items.Count-1 do
    if listbox2.Selected[i] then
      if i>0 then
       listbox2.Items.exchange(i,i-1);
end;procedure TForm1.SpeedButton4Click(Sender: TObject);
var
i:integer;
begin
 for i:=listbox2.Items.Count-1 downto 0 do
    if listbox2.Selected[i] then
      if i<listbox2.Items.Count-1  then
         listbox2.Items.exchange(i,i+1);
end;

解决方案 »

  1.   

    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var i:integer;
    begin
       i:=ListBox1.ItemIndex;
       if (i<=0)or(i>ListBox1.Items.Count) then
          begin
           SpeedButton1.enabled:=false; Exit;
          end;
       ListBox1.Items.Exchange(i,i-1);
       SpeedButton2.Enabled:=true;
    end;procedure TForm1.SpeedButton2Click(Sender: TObject);
    var i:integer;
    begin
       i:=ListBox1.ItemIndex;
       if (i<0)or(i>=ListBox1.Items.Count-1) then
         begin
            SpeedButton2.Enabled:=false; Exit;
         end;
       ListBox1.Items.Exchange(i,i+1);
       SpeedButton1.Enabled:=true;
    end;