Hier darfst Du ausnahmsweise mal nicht "lb.Beginupdate" setzen.
So funktionierts also:
Delphi-Quellcode:
procedure TForm4.btExchangeClick(Sender: TObject);
begin
//lb.BeginUpdate;
lb.ItemsExchange(lb.ListItems[lb.ItemIndex], lb.ListItems[lb.ItemIndex+1]);
//lb.EndUpdate;
end;
Erläuterung: Intern setzt die Funktion "ItemsExchange" selber Listbox.BeginUpdate und Listbox.Endupdate ein. Wenn Du das selber vorher setzt, geht die interne Routine davon aus, dass die Listbox gerade aktualisiert wird und führt die Änderung nicht aus.
Ist leider nirgendwo dokumentiert.