Estoy trabado con esto y por eso pido vuestra ayuda.
Tengo una pequeña rutina para mostrar un array y logré hacer que al clickear sobre los headers, se ordene por el header pulsado.
Lo que me interesaría es que, además quede algún indicativo de que se ordenó por esa columna (porder cambiar el font al header que se pulsó o algo similar).
Un colega me recomendó usar DrawHeaders() pero no encuentro la vuelta como hacerlo.
Adjunto el código para ver si alguien me da una mano. Gracias.
Rolando
- Code: Select all Expand view
function muestroarray(aArray,cTrabajos)
local oLbx , oDlg , aArray1
define dialog oDlg resource "LISTARREGISTROS"
redefine listbox oLbx fields ; //
aArray[oLbx:nAt,1] , ;
+aArray[oLbx:nAt,2] , ;
+aArray[oLbx:nAt,3] , ;
+aArray[oLbx:nAt,4] , ;
+aArray[oLbx:nAt,5] , ;
+aArray[oLbx:nAt,6] , ;
+aArray[oLbx:nAt,7] , ;
+aArray[oLbx:nAt,8] , ;
+aArray[oLbx:nAt,9] , ;
+aArray[oLbx:nAt,10] , ;
+aArray[oLbx:nAt,11] , ;
+aArray[oLbx:nAt,12] , ;
+aArray[oLbx:nAt,13] ;
id 4001 ; //
of oDlg
oLbx:aHeaders := { " Talón " ," NOMBRE " , "Dirección " , "TELEFONO" ,;
"Artefacto" , " Modelo " , "Fecha IN" , "Para El" , ;
"Finalizado" , "FACOMPRA" , "DEALER" , "SERIE" , " RECNO "}
oLbx:setarray(aArray)
oLbx:bLogicLen := { || len( aArray ) }
oLbx:nFreeze:=2
oLbx:nClrPane:= nRGB(230,230,250)
oLbx:nHeaderHeight:= 20
oLbx:bLClicked:= (oLbx:bFont :={|nRow,nCol,nStyleLine| OrdenoArray((oLbx:GetColHeader(nRow,nCol)) ,;
@aArray , oLbx:refresh() ) } )
activate dialog oDlg center
return nil
//-----------------------------------------------------------------------
Function OrdenoArray( nCol , aArray)
if nCol = 7 .or. nCol = 8 .or. nCol = 9
aArray1 := asort(aArray,,, { |x, y| dtos(ctod(x[nCol])) < dtos(ctod(y[nCol])) })
aArray := aArray1
return nil
endif
if nCol > 0
aArray1 := asort(aArray,,, { |x, y| x[nCol] < y[nCol] })
aArray := aArray1
return nil
endif
Return nil