Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Problem beim Umsortieren v. ListView-Items in vsIcon-Ansicht

  Alt 19. Mai 2008, 02:14
Hallo, wer weiß hier einen Rat? Ich haben eine ListView (SortType = stNone), die z.B. 8 Items in der vsIcon-Ansicht anzeigt. Wenn ich nun z.B. Item2 per Drag&Drop nach Position 5 verschiebe (Routine s. unten), so wird dieses Item immer am Ende der Items eingefügt (anstatt an Position 5)! Wenn ich danach aber in die vsReport-Ansicht wechsle, befindet sich das verschobene Item doch an der richtigen Stelle (an Position 5). Wieder zurück in der vsIcon-Ansicht ist das verschobene Item wieder an letzter Stelle!

Wie kann man nun in der vsIcon-Ansicht die gleiche Reihenfolge der Items wie in der vsReport-Ansicht herstellen, d.h. dass sich das verschobene Item an der richtigen Position 5 befindet?

Hier ist der Code für das Drag&Drop innerhalb der ListView:

Delphi-Quellcode:
procedure TMainForm.ListViewDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  currentItem, nextItem, dragItem, dropItem: TListItem;
begin
  if Sender = Source then
  begin
    with TListView(Sender) do
    begin
      dropItem := GetItemAt(X, Y);
      currentItem := Selected;
      while currentItem <> nil do
      begin
        nextItem := GetNextItem(currentItem, TSearchDirection(sdAll), [IsSelected]);
        if Assigned(dropItem) then
          dragItem := Items.Insert(dropItem.Index)
        else
          dragItem := Items.Add;
        dragItem.Assign(currentItem);
        currentItem.Free;
        currentItem := nextItem;
      end;
    end;
  end;
end;

procedure TMainForm.ListViewDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Sender = ListView;
end;
ListView.DragMode ist natürlich dmAutomatic.

Ich habe die ListViewDragDrop-Routine im Debugger genau verfolgt: Das verschobene Item wird in der vsIcon-Ansicht tatsächlich an Position 5 eingefügt, aber als letztes Item angezeigt!
  Mit Zitat antworten Zitat