[Delphi]Listview omdraaien en sorten op column

Pagina: 1
Acties:

  • JTW
  • Registratie: September 2001
  • Laatst online: 05-05 22:47
Ik ben een programma aan het maken met een listview erin, maar nu wilde ik die laten sorteren per kolom. Dat is me ook gelukt, was simpel, maar nu het probleem:

Ik wil dus dat alle items in de listview worden omgedraaid als ik nog een keer op die kolom klik.
Ik was al zover gekomen, maar ik kan de fout niet vinden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TFormPOP3.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
         //columtosort is de kolom waar je op hebt geklikt en lastcolumntosort is de
         //kolom waar je de keer ervoor op hebt geklikt
  ColumnToSort := Column.Index;
  ListView.AlphaSort;
end;


procedure TFormPOP3.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
var
  ix: Integer;
  sign: integer;
begin
  ix := columntosort-1;
  if LastColumnToSort = columntosort then begin
    if columntosort = 0 then
      Compare := sign*CompareText(Item1.Caption,Item2.Caption)
    else
      Compare := sign*CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
    if sign = 1 then
      sign := -1
    else sign := 1;
  end else begin
  if columntosort = 0 then
    Compare := CompareText(Item1.Caption,Item2.Caption)
  else
    Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
  sign := -1;
  LastColumnToSort := columntosort;
  end;
end;


Alvast bedankt :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Wil je nu dat wij de code voor jou gaan verzinnen?

Gewoon bijhouden op welke column je laatst gesorteerd hebt.
Als er bij een column_sort de huidige columnindex == vorige columnindex, moet je de Compare-Value veranderen.

Ga eens na wat CompareText returned als Item1 > Item2 enzo.... Denk eens goed na, en met bovenstaande tip kom je er wel. ;)

https://fgheysels.github.io/


  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

HINT:


Compare := ????? * -1
of
Compare := ????? * 1

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ok.
Met mijn tip en die van cimbom moet het gewoon een eitje zijn om tot de oplossing te komen...

https://fgheysels.github.io/


  • JTW
  • Registratie: September 2001
  • Laatst online: 05-05 22:47
Ik vermenigvuldig CompareText ook met sign(waarde 1 of -1), maar dat werkt niet.
Als ik ipv dat -CompareText gebruik, kan ik 1 keer omdraaien, maar daar blijft het ook bij.

Het gaat me dus om dat sign....
Volgens mij zou het moeten werken, maar dat doet het niet....

[ Voor 36% gewijzigd door JTW op 09-07-2003 16:40 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:29

Creepy

Tactical Espionage Splatterer

JTW schreef op 09 July 2003 @ 16:38:
Het gaat me dus om dat sign....
Volgens mij zou het moeten werken, maar dat doet het niet....
Je initialiseert sign niet op het moment dat je de functie begin.

offtopic:
Overigens excuses aan whoami voor het volledig uitschrijven van z'n hint ;)

[ Voor 19% gewijzigd door Creepy op 09-07-2003 16:58 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

En als je debugged? Wat zie je dan gebeuren? Waar gaat het niet goed?

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Creepy schreef op 09 July 2003 @ 16:45:
[...]

Je initialiseert sign niet op het moment dat je de functie begin.
Ja, dat is het idd. Het is zelfs een locale variable. Daar heb je niet aan, die blijft natuurlijk altijd hetzelfde als je die functie aanroept :) Maak m eens globaal.

We adore chaos because we like to restore order - M.C. Escher


  • JTW
  • Registratie: September 2001
  • Laatst online: 05-05 22:47
[stom geblaat@mij]
Creepy schreef op 09 juli 2003 @ 16:45:
[...]

Je initialiseert sign niet op het moment dat je de functie begin.
nee, maar dat doe ik hier:

code:
1
2
3
4
5
6
7
8
9
begin
  ix := columntosort-1;
  if LastColumnToSort = columntosort then begin
// KNIP KNIP
  end else begin
// KNIP KNIP
  sign := -1;
  LastColumnToSort := columntosort;
  end;

aangezien LastColumnToSort nooit hetzelfde kan zijn als ColumnToSort aan het begin van het programma


[/ stom geblaat@mij]

ok, stom van me |:(
bedankt _/-\o_

[ Voor 9% gewijzigd door JTW op 09-07-2003 16:56 ]

Pagina: 1