Page 1 of 1

Tree with check

Posted: Mon Oct 02, 2006 3:53 pm
by Maurizio
I have a Tree with TVS_CHECKBOXES.
Is it possible to know if CHECKBOX is ON or OFF ( without use :Cargo ) ?

Regards Maurizio

Posted: Tue Oct 03, 2006 5:29 am
by Antonio Linares
Maurizio,

Code: Select all

HB_FUNC( TVISCHECKED )  // hTreeView, hItem
{
   hb_retl( TreeView_GetCheckState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ) ) );
}
MsgInfo( TVIsChecked( oTree:hWnd, oTVItem:hItem ) )

Posted: Tue Oct 03, 2006 6:36 am
by Maurizio
It works.

Thanks again, Antonio

Posted: Tue Oct 03, 2006 6:57 am
by Maurizio
Hello Antonio

is possible enable or disable CHECKBOX ?

Regards Maurizio

Posted: Tue Oct 03, 2006 8:05 am
by Antonio Linares
Maurizio,

Code: Select all

HB_FUNC( TVSETCHECK )  // hTreeView, hItem, lOnOff 
{ 
   hb_retl( TreeView_SetCheckState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), hb_parl( 3 ) ) ); 
}

Posted: Tue Oct 03, 2006 8:50 am
by Maurizio
Hello Antonio

I have this error

Expression syntax in function HB_FUN_TVSETCHECK.

But the function TreeView_SetCheckState , chek or unchek the CHEKBOX, that I need is to disable or hide the chekbox in front of the Item .

Regrads Maurizio

Posted: Tue Oct 03, 2006 9:54 am
by Antonio Linares
Maurizio,

I don't know if it is possible to hide it.

Posted: Tue Oct 03, 2006 8:59 pm
by Rossine
Olá Maurizio,

Tente Isto: Mude em \fwh\source\classes\TTREEVIE.PRG

Code: Select all

...
   METHOD SetCheck( nIt, lFlag ) INLINE TVSetCheck( ::hWnd, nIt, lFlag )

   METHOD IsChecked( nIt ) INLINE TVIsChecked( ::hWnd, nIt )
...
e isto

Code: Select all

#pragma BEGINDUMP

#include "windows.h"
#include "commctrl.h"
#include "hbapi.h"

HB_FUNC( TVSETCHECK ) // hTreeView, hItem, lOnOff
{
TVITEM tvItem;
   HWND hWnd = ( HWND ) hb_parnl( 1 ); 
   HTREEITEM hItem = ( HTREEITEM ) hb_parnl( 2 );

tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = hItem;
tvItem.stateMask = TVIS_STATEIMAGEMASK;

/*
Since state images are one-based, 1 in this macro turns the check off,
and
2 turns it on.
*/
tvItem.state = INDEXTOSTATEIMAGEMASK(( hb_parl( 3 ) ? 2 : 1));

   hb_retl( ( BOOL ) TreeView_SetItem( ( HWND ) hb_parnl( 1 ), &tvItem ) );
}

HB_FUNC( TVISCHECKED ) // hTreeView, hItem
{
TVITEM tvItem;
   HWND hWnd = ( HWND ) hb_parnl( 1 ); 
   HTREEITEM hItem = ( HTREEITEM ) hb_parnl( 2 ); 

// Prepare to receive the desired information.
tvItem.mask = TVIF_HANDLE | TVIF_STATE;
tvItem.hItem = hItem;
tvItem.stateMask = TVIS_STATEIMAGEMASK;

// Request the information.
   hb_retl( ( BOOL ) TreeView_GetItem( ( HWND ) hb_parnl( 1 ), &tvItem ) );

// Return zero if it's not checked, or nonzero otherwise.
   hb_retl( (BOOL) (tvItem.state >> 12) -1 ) ;
}

#pragma ENDDUMP

Use assim:

Code: Select all

Para Setar o status:

oTree:SetCheck( oItem:hItem, .F. ) && Uncheck

ou

oTree:SetCheck( oItem:hItem, .T. ) && check

Para Ler o status:

msgstop( oTree:IsChecked( oItem:hItem ) )
Abraços,

Rossine.