Einzelnen Beitrag anzeigen

Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#5
  Alt 11. Jul 2002, 20:09
Es hat offenbar Probleme mit den Objekt-Referenzen gegeben. Wenn man sich lediglich auf die Captions beschränkt, dann geht es. Zudem arbeitet die von mir vorgestellte Version auf einem Datenbestand, der mit dem Index 1 anfängt. Also musst Du die Indices aller Zugriffe auf die ListItems um 1 erniedrigen.
Code:
var i,j,h:integer;
    v:TListItem;
    begin
     v:= TListItem.Create( ListView1.Items ); // den habe ich mal erzeugt
     h:=1;
     Repeat
      h:=(3*h)+1;
     Until (h>ListView1.Items.Count-1);
     Repeat
      h:=(h div 3);
      For i:=(h+1) To ListView1.Items.Count-1 Do
       Begin
        v.Caption:=ListView1.Items.Item[i-1].Caption;
        j:=i;
        While ((j>h) and (ListView1.Items.Item[j-h-1].Caption>v.Caption)) Do
         Begin
          ListView1.Items.Item[j-1].Caption:=ListView1.Items.Item[j-h-1].Caption;
          dec(j,h);
         End;
        ListView1.Items.Item[j-1].Caption:=v.Caption;
       End;
     Until (h=1);
     v.Free;
    end;
In dieser Fassung funktioniert der Algorithmus - jetzt muss man sich nur noch um eine saubere Behandlung der Objekte kümmern.

Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat