On Wed, 15 May 2013 11:58:18 -0700 (PDT), BGeorge <
bgeo...@in.gr>
wrote:
Hello George,
I use code I found years ago in this NG; I hope this helps you.
SELF:oDCLV1:SortByColumn(oListViewColumnClickEvent:ListviewColumn:namesym)
METHOD SortByColumn( oLVColumn ) CLASS IC2ListView
//#s
//#s
//#x
//#l Derived from Judd Williams comp-lang newsgroup 22012001
//#l Requires values:e.g. oItem:SetValue(cKlasse, #KLASSE)
//#l
//#l
//#p
//#p
//#r
//#e
SELF:oDCLV:SortByColumn(oListViewColumnClickEvent:ListviewColumn:namesym)
// Zie Functies, IC2.lib
//#e
IF !IsObject( oLVColumn )
oLVColumn := SELF:GetColumn( oLVColumn )
ENDIF
IF oLVColumn = oSortColumn // Repeat click, so invert the sort.
lDescend := !lDescend
ELSEIF ALen( oLVColumn:__ValueList ) > 0
// Sort non-strings in descending order. This is my own
preference.
lDescend := !IsString(oLVColumn:__ValueList[1])
ENDIF
oSortColumn := oLVColumn
RETURN LOGIC(_CAST, SendMessage( hWnd, LVM_SORTITEMS, DWORD(_CAST,
hWnd),LONG(_CAST, @ListView_CompareColumnValues()) ))
METHOD SortRule( xVal1, xVal2 ) CLASS IC2ListView
//#s
//#s
//#x
//#l Derived from Judd Williams comp-lang newsgroup 22012001
//#l
//#l
//#l
//#p
//#p
//#r
//#e
//#e
IF lDescend
IF xVal1 < xVal2
RETURN 1
ELSEIF xVal1 > xVal2
RETURN -1
ELSE
RETURN 0
ENDIF
ELSE
IF xVal1 > xVal2
RETURN 1
ELSEIF xVal1 < xVal2
RETURN -1
ELSE
RETURN 0
ENDIF
ENDIF
STATIC FUNCTION ListView_CompareColumnValues(lParam1 AS LONG, lParam2
AS LONG, lHandle AS LONG) AS INT CALLBACK
//#s
//#s
//#x
//#l Derived from Judd Williams comp-lang newsgroup 22012001
//#l
//#l
//#l
//#p
//#p
//#r
//#e
//#e
LOCAL oListView AS IC2ListView
LOCAL xVal1, xVal2 AS USUAL
LOCAL aVal AS ARRAY // 9-3-2004
compilerbug 2.7
// oListView := __WCGetControlByHandle( PTR(_CAST, lHandle) )
oListView := OBJECT(_CAST,__WCGetControlByHandle( PTR(_CAST,
lHandle) )) // Prefered code according to Meinhard NG 6-8-2012
IF oListView <> NULL_OBJECT
aVal:=oListView:oSortColumn:__ValueList // 9-3-2004
xVal1 := aVal[lParam1] // instead of xVal1 :=
oListView:oSortColumn:__ValueList[lParam1]
xVal2 := aVal[lParam2] // instead of xVal2 :=
oListView:oSortColumn:__ValueList[lParam2]
RETURN oListView:SortRule(xVal1,xVal2)
ENDIF
RETURN 0