#include "Fivewin.ch"
#define MO_NONE 0
#define MO_ASC 1
#define MO_DESC 2
FUNCTION MAIN()
LOCAL oDlg, oBrw, oFnt
LOCAL hBmp1 := READBITMAP( 0, "\fwharbour\bitmaps\checkon.bmp" )
LOCAL hBmp2 := READBITMAP( 0, "\fwharbour\bitmaps\checkoff.bmp" )
LOCAL aOrd := { MO_ASC, MO_DESC, MO_NONE, MO_NONE }
OVERRIDE METHOD SetPos CLASS TScrollbar WITH MySetPos
USE TEST
DEFINE DIALOG oDlg SIZE 400, 300
DEFINE FONT oFnt NAME "Arial" SIZE 0, -12
@ 0, 0 LISTBOX oBrw FIELDS TEST -> last,;
TEST -> first,;
IF( TEST -> last = "S", hBmp1, hBmp2 ),;
"";
HEADER "LAST", "FIRST", " S", hBmp1;
SIZES 100, 100, 16, 0;
FONT oFnt
oBrw:lCellStyle = .T.
oBrw:bLClicked = { | nRow, nCol | If( oBrw:nAtCol( nCol ) = 3, Cambia( oDlg, oBrw, nRow ), ) }
oBrw:bLButtonUp = { || oDlg:Refresh( .F. ) }
oDlg:bStart = { || oBrw:oHScroll:bGoUp := { || oDlg:Refresh( .F. ) },;
oBrw:oHScroll:bGoDown := { || oDlg:Refresh( .F. ) },;
oBrw:bChange := { || oDlg:Refresh( .F. ) } }
ACTIVATE DIALOG oDlg;
ON INIT oDlg:SetControl( oBrw );
ON PAINT MARCAORDINE( oDlg, hDC, oBrw, aOrd );
CENTER
CLOSE
DELETEOBJECT( hBmp1 )
DELETEOBJECT( hBmp2 )
RELEASE FONT oFnt
RETURN NIL
STATIC FUNCTION CAMBIA( oDlg, oBrw, nRow )
IF NWROW( oBrw:hWnd, oBrw:hDC, nRow, IF( oBrw:oFont != nil, oBrw:oFont:hFont, 0 ) ) = 0
RETURN NIL
ENDIF
? "Qui cambi il valore che determina la spunta"
oBrw:Refresh( .F. )
oDlg:Refresh( .F. )
RETURN NIL
#define SM_CYHSCROLL 3
STATIC FUNCTION MARCAORDINE( oDlg, hDC, oBrw, aOrd )
LOCAL aValues := oBrw:aHeaders
LOCAL aColSizes := oBrw:GetColSizes()
LOCAL nWidth := WNDWIDTH( oBrw:hWnd ) - IF( oBrw:oVScroll != nil .AND. EVAL( oBrw:bLogicLen ) > 1, GETSYSMETRICS( SM_CYHSCROLL ) + 3, 0 )
LOCAL nColStart := -1
LOCAL nTop, nLeft, nRight
LOCAL hGPen, hWPen
LOCAL i
SYSREFRESH()
hGPen = CREATEPEN( 0, 1, CLR_GRAY )
hWPen = CREATEPEN( 0, 1, CLR_WHITE )
nTop = oBrw:nTop + 6
FOR i = oBrw:nColPos TO LEN( aValues )
nLeft = nColStart + 1
nRight = MIN( nColStart := ( nLeft + aColSizes[ i ] - 1 ), nWidth )
IF nLeft > nWidth
EXIT
ENDIF
IF i == LEN( aValues )
nRight = nWidth
ENDIF
nRight -= 12
IF aOrd[ i ] = MO_ASC
MOVETO( hDC, nRight, nTop )
LINETO( hDC, nRight + 6, nTop, hGPen )
LINETO( hDC, nRight + 3, nTop + 6, hWPen )
LINETO( hDC, nRight, nTop, hGPen )
ENDIF
IF aOrd[ i ] = MO_DESC
MOVETO( hDC, nRight, nTop + 6 )
LINETO( hDC, nRight + 6, nTop + 6, hGPen )
LINETO( hDC, nRight + 3, nTop, hWPen )
LINETO( hDC, nRight, nTop + 6, hGPen )
ENDIF
NEXT
DELETEOBJECT( hWPen )
DELETEOBJECT( hGPen )
RETURN NIL
#define SB_HORZ 0
#define SB_VERT 1
#define SB_CTL 2
STATIC FUNCTION MYSETPOS( nPos )
LOCAL Self := HB_QSELF()
::oWnd:oWnd:Refresh( .F. )
RETURN SETSCROLLPOS( IF( ::lIsChild, ::oWnd:hWnd, ::hWnd ), IF( ::lIsChild, IF( ::lVertical, SB_VERT, SB_HORZ ), SB_CTL ), nPos, ::lReDraw )