[Delphi] OnCompare van een ListView

Pagina: 1
Acties:

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb een ListView die ik met een AlphaSort sorteer. Heb vervolgens zelf een OnCompare event handler gemaakt die de lijst goed sorteerd, dit werkt perfect.

Maar nu heb ik op de achtergrond (in het gehuegen) een kopie van de lijst (TList) en die moet hij ook goed worden gesorteerd. Nu wilde ik dus achterhalen wat hij precies doet met die Item1 en Item2, maar kom er niet echt uit.
code:
1
2
procedure TMainForm.UserTopicListCompare(Sender: TObject; Item1,
  Item2: TListItem; Data: Integer; var Compare: Integer);

Wat als Compare = 1 (groter), komt Item1 dan voor Item2 ofzo? En hoe zit het met Compare = 0 (gelijk) en Compare = -1 (kleiner).

Hoop echt dat iemand mij duidelijkheid kan geven.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Windows doet waarschijnlijk een quicksort oid op de items. En elke keer als hij 2 items moet vergelijken, vraagt hij aan jouw [dmv de callback] welke waarde 'groter' is dan de ander.

Uit de Win32 Programmers Reference:
The comparison function must return a negative value if the first item should precede the second, a positive value if the first item should follow the second, or zero if the two items are equivalent.
Een TList heeft ook een Sort method. Moet je ongeveer zo'n zelfde callback aan meegeven.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Da's idd ook een optie, gewoon die TList sorteren.

Ik probeerde in de OnCompare te achterhalen wat er met de 2 items gebeurde om vervolgens PRECIES hetzelfde te gaan doen met de items in de TList. Op die manier zouden de 2 lijsten gelijk blijven.

Is dat ook mogelijk, scheelt me een extra paar functies om de TList ook aparte te sorteren, aangezien de TList gewoon een afspiegeling is van de ListView.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik weet verder wel wat ik terug moet geven als Compare, maar dan vraag ik me dus af wat hij dan gaat doen met die 2 items aan de hand van die Compare waarde, zodat ik hetzelfde kan doen in die TList.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Ik gok dat windows een quicksort gebruikt, maar dat staat niet in de help of op msdn.

Het is denk ik niet slim om op de manier die jij wilt, het te implementeren.

Kun je niet beter de Data property van TListItem gebruiken ipv een TList?

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Uuuhmm, daar had ik nog niet naar gekeken, dat biedt idd ook een goede vervanging. Thanks, morgen ff proberen in te bouwen.

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1