[Lazarus] Can't make working sorting inTListView

Frederic Da Vitoria davitofrg at gmail.com
Mon Jul 29 17:20:20 CEST 2013


2013/7/29 Flávio Etrusco <flavio.etrusco at gmail.com>

> On Mon, Jul 29, 2013 at 10:20 AM, Geoffray Levasseur-Brandin
> <jeff.levasseur at free.fr> wrote:
> > Hello all !!
> >
> > I've got a problem with the following code :
> >
> > procedure TfMain.lvPackageListColumnClick(Sender: TObject; Column:
> > TListColumn);
> > begin
> >   if Column.Index = FLastSortedColumn then
> >     FAscending := not FAscending
> >   else
> >     FLastSortedColumn := Column.Index;
> >   lvPackageList.SortColumn := Column.Index;
> > end;
> >
> > procedure TfMain.lvPackageListCompare(Sender: TObject; Item1, Item2:
> > TListItem;
> >   Data: Integer; var Compare: Integer);
> > begin
> >   case Data of
> >     0: Compare := AnsiCompareText(Item1.Caption, Item2.Caption);
> //pkgname
> >     1: Compare := CompareVersion(Item1.SubItems[0], Item2.SubItems[0]);
> > //installed version
> >     2: Compare := CompareVersion(Item1.SubItems[1], Item2.SubItems[1]);
> //last
> > version
> >     3: Compare := CompareInstSize(Item1.Caption, Item2.Caption);
> //installed
> > size
> >     4: Compare := CompareDefSize(Item1.Caption, Item2.Caption); //pkgsize
> >     5: Compare := AnsiCompareText(Item1.SubItems[4], Item2.SubItems[4]);
> > //description
> >   end;
> >   if not FAscending then
> >     Compare := -Compare;
> > end;
> >
> > Whatever the column I'm clicking on it's always sorting the first
> column. I do
> > really not understand what's wrong. All the functions I've made giving
> Compare
> > its value returns correctly 1 if Itme1 > Item2, 0 if equal and -1 if
> Item1 <
> > Item2.
>
> I'm not really sure how TListView is supposed to work, however by
> debugging the code I can see 'Data' is always 0. Maybe you're supposed
> to just use ListView.SortColumn.
>

http://www.delphitips.net/2008/04/10/sort-listview-by-clicking-on-columns/and
http://stackoverflow.com/questions/15605509/sorting-tlistview-columns-cont-ascending-descendingboth
use directly the columns instead of the Data parameter. IIRC, that's
how I did it the few times I used TListView. I don't know what Data is for,
though.

-- 
Frederic Da Vitoria
(davitof)

Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20130729/659cf470/attachment-0003.html>


More information about the Lazarus mailing list