AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem beim Umsortieren v. ListView-Items in vsIcon-Ansicht
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von PeterPanino · begonnen am 19. Mai 2008 · letzter Beitrag vom 27. Aug 2015
Antwort Antwort
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
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans

  Alt 19. Mai 2008, 06:23
Hallo, ist Autoarrange auf True gesetzt?

Dann sollte mein vereinfacher Code funktionieren:

Delphi-Quellcode:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  SelItem: TListItem;
begin
  if Sender = Source then
  begin
   SelItem := TListView(Sender).Selected;
   If assigned(SelItem) then
     TListView(Source).Selected.SetPosition(Point(X,Y));
  end;
end;
Thomas
  Mit Zitat antworten Zitat
PeterPanino

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

Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans

  Alt 19. Mai 2008, 12:11
Vielen Dank, diese Methode funktioniert wirklich! Jetzt muss ich nur noch den Code so umschreiben, dass dammit auch das Verschieben von mehreren Items auf einmal funktioniert. (Das war ja auch der Grund, weshalb ich den obigen Code verwendet habe). Schönen Tag noch!
  Mit Zitat antworten Zitat
PeterPanino

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

Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans

  Alt 19. Mai 2008, 13:04
Fehlanzeige! Das Codebeispiel von toms verschiebt das Item zwar visuell, die tatsächliche interne Reihenfolge wird jedoch nicht verändert! Folgender Code, mit dem ich die Reihenfolge der Items NACH dem Verschieben eines Items abfrage, beweist dies:

Delphi-Quellcode:
for i := 0 to ListView.Items.Count - 1 do
  s := s + ListView.Items[i].Caption + #13#10;
Clipboard.AsText := s;
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#5

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

  Alt 27. Aug 2015, 13:36
Hallo zusammen,

sorry, dass ich das alte Thema nochmals aufwärme, aber genau das Problem fällt mir nun auch auf die Füße:
Per Drag&Drop kann man im vsIcon-Modus sehr bequem die Icons visuel verschieben, doch die internen Reihenfolge ändert sich nicht! Verschiebe ich beispielsweise das 5. Icon auf die erste Position ist der Index des Items immer noch 4 und nicht 0. Und die Eigenschaft Index ist auch noch schreibgeschützt!

Kann mir jemand sagen wie man nach dem Verschieben den aktuellen Index eines Item herausbekommt? Ich wollte es schon über dessen graphische Position ermitteln. Doch je nach Fenstergröße und Einstellung kann ja das Spacing und die Anzahl Icons pro Zeile unterschiedlich sein.

Auch hier im Forum lässt sich bezüglich dieses Problems nichts finden. Bin ich der Erste mit solch einem Problem?

Gruß
e-gon
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz