Hi,
ich habe im Forum folgenden Drag&Drop-Code gefunden:
Delphi-Quellcode:
procedure TfrmMain.lbListDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState;
var Accept: Boolean);
var verschieben, ItemPos, i: integer;
begin
if (Source
is TListbox)
and ((Source
as Tlistbox).SelCount > 0)
then
with Source
as TListbox
do
begin
ItemPos:= ItemAtPos(Point(x, y), True);
if (ItemPos < 0)
or (ItemPos >= Items.Count)
then
Exit;
if Selected[ItemPos]
then
ItemIndex := ItemPos;
verschieben := ItemIndex - ItemPos;
if verschieben <> 0
then
begin
if verschieben > 0
then
i := 0
else
i := pred(Items.Count);
while (i >= 0)
and (i < Items.Count)
do
begin
if Selected[i]
then
begin
if (i- verschieben >= 0)
and (i- verschieben < Items.Count)
then
begin
Items.Move(i, i - verschieben);
// *
Selected[i] := False;
Selected[i- verschieben] := True;
end else
Break;
end;
if verschieben > 0
then
inc(i)
else
dec(i);
end;
end;
Accept := True
end else
Accept:= False;
end;
Da die Items nur die Ausgabe eines Arrays sind, muss das Array noch aktualisiert werden. Dies wollte ich an der mit * markierten Stelle mit der Funktion Move erledigen:
Move(fFiles[i], fFiles[i - verschieben], ((i - verschieben) - i) * SizeOf(fFiles[i]));
Warum ändert sich im Array nichts ?
[Wie ich Drag&Drop liebe, zumal die Titelformulierungen hierbei noch unglücklicher als sonst sind....]