Ja, da bin ich wohl etwas zu kurz gesprungen - irgendwo musst du natürlich deine Variable CurrentSong korrigieren:
Delphi-Quellcode:
//Playlisteneinträge verschieben
procedure Tmediaplayer_frm.PlayList_ListBoxDragDrop(Sender,
Source: TObject; X, Y: Integer);
var
i,j : Integer;
begin
i := PlayList_ListBox.ItemIndex;
j := PlayList_ListBox.ItemAtPos(Point(x, y), true);
// diesen Test solltest du im OnDragOver machenvorhanden
if j > -1
then
begin
// die nächste Zeile würde bei virtueller Listbox entfallen
PlayList_ListBox.Items.Move(i,j);
PlayList.Move(i,j);
AdjustCurrentSong(i, j);
PlayList_ListBox.ItemIndex := j;
end;
end;
// interval test
procedure TMediaPlayer_frm.AdjustCurrentSong(iFrom, iTo: integer);
begin
if (CurrentSong < iFrom)
and (CurrentSong < iTo)
or (CurrentSong > iFrom)
and (CurrentSong > iTo)
then
Exit;
// above and below don't matter
if iFrom < iTo
then Dec(CurrentSong)
// sliding up
else Inc(CurrentSong);
// sliding down
end;
Ob es jetzt < oder <= bzw. > oder >= sein muss, dass überlasse ich dir zum Grübeln.
marabu