Hallo,
ich benutze folgenden Tip für Drag&Drop der ListItems in einem ListView:
http://www.swissdelphicenter.ch/de/showcode.php?id=902
Finktioniert prima, aber: bei mir ist jeder ListItem in der ListView ist mit einem Thread "verknüpft":
Code:
..
var
item: TListItem;
thread: TThread;
begin
item := Form1.ListView1.Items.Add;
Thread := TMyThread.create(true, Item);
item.Caption := Edit1.Text;
item.Data := Pointer(Thread);
Thread.resume;
end;
..
Dabei ist der Thread so erstellt, dass er Terminiert, wenn er den zugewiesenen ListItem nicht mehr findet. Das Problem ist folgendes: bei Drag&Drop wird der ziehende ListItem gelöscht und einen neuen erstellt:
Code:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
DragItem, DropItem, CurrentItem, NextItem: TListItem;
begin
if Sender = Source then
with TListView(Sender) do
begin
DropItem := GetItemAt(X, Y);
CurrentItem := Selected;
while CurrentItem <> nil do
begin
NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]);
if DropItem = nil then DragItem := Items.Add
else
DragItem := Items.Insert(DropItem.Index);
DragItem.Assign(CurrentItem);
CurrentItem.Free;
CurrentItem := NextItem;
end;
end;
end;
Code:
...
CurrentItem.Free;
...
Der Thread wird sofort auch terminiert. Kann man den Tip irgendwie modernisieren, so dass der ListItem nicht gelöscht, sondern nur an eine andere stelle verschoben wird?
Danke!