Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#14

AW: Suche Control mit Drag&Drop-Eigenschaften wie Win-Desktop

  Alt 4. Sep 2018, 09:54
Offenbar lässt sich das Desktop-Verhalten mit einem normalen ListView nicht exakt nachbilden (zumindest ist mir das nicht gelungen).

Knackpunkt ist das Wrapping der Spalten, wenn ein Item in die Spalte verschoben wird. Der Desktop führt das Wrapping korrekt durch, lässt aber alle Items außerhalb der belegten Spalten an ihrem Platz. Beim ListView macht ein Arrange(arSnapToGrid) aber kein Column-Wrapping, während das Arrange(arDefault) die frei positionierten Items wieder in die Spalten einordnet.

Nun ist ein Desktop aber auch in der Regel nicht einfach in der Größe änderbar bzw. geraten die Icons schon mal gehörig durcheinander, wenn man das tut. Ich vermute daher daß Microsoft hier eine spezielle Version eines ListViews verwendet oder mit undokumentierten Funktionen arbeitet.

Vielleicht kommt ja noch jemand auf die zündende Idee.

Hier noch der Code für das korrekte Einordnen:
Delphi-Quellcode:
var
  DropItem: TListItem;
  CurrentItem: TListItem;
  lvw: TListView;
begin
  if Sender = Source then begin
    lvw := TListView(Sender);
    CurrentItem := lvw.Selected;
    if CurrentItem <> nil then begin
      DropItem := lvw.GetItemAt(X, Y);
      if DropItem <> nil then begin
        Y := DropItem.Top - 1;
      end;
      CurrentItem.SetPosition(Point(X, Y));
      lvw.Arrange(arSnapToGrid);
    end;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat