Page 1 of 2

Negrita en in ITEM del tree?

PostPosted: Tue Aug 24, 2021 9:20 am
by goosfancito
Hola.
Quiero que al hacer un click se ponga en negrita ese ITEM del tree,
como tengo que ponerlo en negrita a ese item?
Code: Select all  Expand view

METHOD MenuPop( nRow, nCol )
   LOCAL oMenu
   LOCAL oItem := ::oTree:hitTest( nRow, nCol )
...
 

Re: Negrita en in ITEM del tree?

PostPosted: Tue Aug 24, 2021 11:17 am
by Antonio Linares
hay que usar estos flags:

Code: Select all  Expand view
    TV_ITEM tvi;
    tvi.mask = TVIF_STATE | TVIF_HANDLE;
    tvi.hItem = hItem;
    tvi.state = TVIS_BOLD;
    tvi.stateMask = TVIS_BOLD;
    SetItem(&tvi);


ahora hay que ver como asignarlos a un item ya existente:

SetItemState( hItem, TVIS_BOLD, TVIS_BOLD );
and we may need to reset the string of the item after the bold state was set to the item
https://www.codeproject.com/Questions/444245/Changing-to-state-of-tree-item-to-BOLD-does-not-ch

Re: Negrita en in ITEM del tree?

PostPosted: Tue Aug 24, 2021 9:31 pm
by goosfancito
Nunca trabaje con los flags, no se siquiera como insertarlos en mi source.

Re: Negrita en in ITEM del tree?

PostPosted: Wed Aug 25, 2021 7:42 am
by hmpaquito
Hace un monton de años coloree el tree modificando los fuentes y a base de pasar parametros a TreeDraw.c y tambien modificando el TreeView.prg-> DrawItem()

No tengo lo de poner en negrita al pulsar un item. Eso requeriria dinamismo en los colores: Refrescar el tree cada vez que se pulse un item... o eso creo...

Re: Negrita en in ITEM del tree?

PostPosted: Wed Aug 25, 2021 11:49 am
by Antonio Linares
Una primera versión:

Code: Select all  Expand view
HB_FUNC( TVSETITEMBOLD ) // ( hWnd, hTreeItem, lBold ) --> lSuccess
{
   UINT uiMask;

   #ifndef _WIN64
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), &uiMask ) );
   #else
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), &uiMask ) );
   #endif

   #ifndef _WIN64
      TreeView_SetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), &uiMask, hb_parl( 3 ) ? TVIS_BOLD: 0 );
   #else
      TreeView_SetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), &uiMask, hb_parl( 3 ) ? TVIS_BOLD: 0 );
   #endif
}

Re: Negrita en in ITEM del tree?

PostPosted: Wed Aug 25, 2021 2:11 pm
by goosfancito
por lo que veo, en el mismo source que uso el fwh puedo insertar codigo c.
es asi?

Re: Negrita en in ITEM del tree?

PostPosted: Wed Aug 25, 2021 3:44 pm
by Antonio Linares
Si

En la Clase TTVItem tienes que añadir este nuevo método:

METHOD Bold( lOnOff ) INLINE TVSetItemBold( ::oTree:hWnd, ::hItem, lOnOff )

y al final de tu PRG esribe:
Code: Select all  Expand view
#pragma BEGINDUMP

#define _WIN32_IE 0x0500
#include <Windows.h>
#include <CommCtrl.h>
#include <hbapi.h>

HB_FUNC( TVSETITEMBOLD ) // ( hWnd, hTreeItem, lBold ) --> lSuccess
{
   UINT uiMask1, uiMask2 = 0;

   #ifndef _WIN64
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), &uiMask1 ) );
   #else
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), &uiMask1 ) );
   #endif

   if( hb_parl( 3 ) )
      uiMask2 = TVIS_BOLD;

   #ifndef _WIN64
      TreeView_SetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), uiMask1, uiMask2 );
   #else
      TreeView_SetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), uiMask1, uiMask2 );
   #endif
}

#pragma ENDDUMP

Re: Negrita en in ITEM del tree?

PostPosted: Wed Aug 25, 2021 8:01 pm
by goosfancito
Luego de hacer las modificaciones que me indicas, puse asi y no me funcionó. Que estoy no entendiendo?


Code: Select all  Expand view
CASE nOpcion == VK_INSERT     // cortar
      ::nHitemCortar := oItem:hitem
      oItem:bold(.t.)
 

Re: Negrita en in ITEM del tree?

PostPosted: Thu Aug 26, 2021 9:16 am
by Antonio Linares
Esta versión funciona bien aqui, muestra negrita, lo que falta es poder quitar negrita

Code: Select all  Expand view
HB_FUNC( TVSETITEMBOLD ) // ( hWnd, hTreeItem, lBold ) --> lSuccess
{
   UINT uiMask1, uiMask2 = 0, bBold = hb_parl( 3 );

   #ifndef _WIN64
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), &uiMask1 ) );
   #else
      hb_retl( TreeView_GetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), &uiMask1 ) );
   #endif

   if( bBold )
      uiMask2 = TVIS_BOLD;
   else
      uiMask1 = uiMask1 ^ TVIS_BOLD;  

   #ifndef _WIN64
      TreeView_SetItemState( ( HWND ) hb_parnl( 1 ), ( HTREEITEM ) hb_parnl( 2 ), uiMask1, uiMask2 );
   #else
      TreeView_SetItemState( ( HWND ) hb_parnll( 1 ), ( HTREEITEM ) hb_parnll( 2 ), uiMask1, uiMask2 );
   #endif

   hb_retl( uiMask1 & TVIS_BOLD );
}

Re: Negrita en in ITEM del tree?

PostPosted: Thu Aug 26, 2021 12:46 pm
by goosfancito
bien, lo dejo no hay drama. sigo no es importante que lo tenga en negrita.
aca no me funciona.
gracias

Re: Negrita en in ITEM del tree?

PostPosted: Thu Aug 26, 2021 3:47 pm
by Antonio Linares
El ejemplo FWH\samples\pim.prg probando el nuevo método Bold() en Class TVItem:

El item que se ha puesto en negrita es "country"

Image

Re: Negrita en in ITEM del tree?

PostPosted: Thu Aug 26, 2021 6:59 pm
by goosfancito
Antonio
O sea que cuando lo estas creando lo pones en negrita?
porque yo intente poner en negrita uno que ya tenia creado.

Re: Negrita en in ITEM del tree?

PostPosted: Fri Aug 27, 2021 5:55 am
by Antonio Linares
Los items ya estan creados, lo que se hace es cambiarlos a negrita o normal

Re: Negrita en in ITEM del tree?

PostPosted: Wed Apr 27, 2022 11:08 am
by goosfancito
Antonio,

La idea de este codigo es que cuando agrego una rama "padre" me lo ponga en negrita, intento hacer esto pero me tira error

Code: Select all  Expand view
        oSubItem := oItem:ADD( oQry:FieldGet( "c7" ) + "     " + ::cCargo )

         IF ( oSubItem:GetSelected() != NIL )
            oSubItem:GetSelected():Bold()
         ENDIF
 


Error description: Error BASE/1004 Message not found: TTVITEM:GETSELECTED
Args:
[ 1] = O TTVITEM

Stack Calls
===========
Called from: => __ERRRT_SBASE( 0 )
Called from: ../../../tobject.prg => TTVITEM:ERROR( 148 )

Re: Negrita en in ITEM del tree?

PostPosted: Wed Apr 27, 2022 11:56 am
by Antonio Linares
El mensaje GetSelected tiene que enviarse al árbol, no a un item

oTree:GetSelected()