Page 1 of 1

tFolder Cambiar Prompts de las pestañas

PostPosted: Mon Mar 16, 2009 4:29 pm
by Biel EA6DD
Existe alguna manera para poder cambiar dinamicamente el Prompt de las pestañas, que no sea el metodo SetPrompts.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Mon Mar 16, 2009 7:42 pm
by Patricio Avalos Aguirre
Hola

A que te refieres dinamicamente?

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 8:19 am
by Biel EA6DD
Tengo una ventana en la que hay varias pestañas, en la primera un Browse, quiero variar los titulos de las pestañas cuando me vaya moviendo por los registros del browse.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 9:11 am
by RenOmaS
No he experimentado esto..
pero puedes tentar

basado en tabcrtl.c

Code: Select all  Expand view

CLIPPER TABSETITEM( PARAMS ) // hWnd, nItem, cPrompt
{
   HWND hWnd = _parni( 1 );
   int nItem = _parni( 2 );

   _bset( ( char * ) &item, 0, sizeof( item ) );

   SendMessage( hWnd, TCM_GETITEM, nItem, ( LONG ) &item );

   #ifndef UNICODE
      item.pszText = _parc( 3 );
   #else  
      item.pszText = AnsiToWide( _parc( 3 ) );
   #endif  
   
   SendMessage( ( hWnd, TCM_SETITEM, nItem, ( LONG ) &item );
   #ifdef UNICODE
      hb_xfree( item.pszText );
   #endif  
}
 

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 2:48 pm
by Daniel Garcia-Gil
Saludos Biel...

dejo un ejemplo funcionando con lo que creo entender lo que quieres lograr.

Code: Select all  Expand view
#include "fivewin.ch"
#include "xbrowse.ch"


function main()
   local oDlg, oBrw, oFld
   local aArray := {}
   local nI
   
   
   for nI = 1 to 10
      aadd( aArray,{ strzero( nI, 2 ), ;
                     "Row: "+strzero( nI,2 )+" Item 1",;
                     "Row: "+strzero( nI,2 )+" Item 2",;
                     "Row: "+strzero( nI,2 )+" Item 3",;
                     "Row: "+strzero( nI,2 )+" Item 4",;
                     "Row: "+strzero( nI,2 )+" Item 5" } )
   next
                     
   
   define Dialog oDlg title "TFolder - xBrowse" size 600,300
   
   @ 0,0 xbrowse oBrw array aArray columns {1,2,3,4,5,6} headers {"Item","Data","Data","Data","Data","Data"} of oDlg;
   COLSIZES {80,80,80,80,80,80 } size 150,150
   
   oBrw:bChange := {|| oFld:SetPrompts( {oBrw:aRow[2], oBrw:aRow[3], oBrw:aRow[4], oBrw:aRow[5], oBrw:aRow[6]} ), oFld:refresh() }
   
   @ 0,155 folder oFld of oDlg prompt aArray[ 1,2 ], aArray[ 1,3 ], aArray[ 1,4 ], aArray[ 1,5 ], aArray[ 1,6 ] pixel;
   size 150,150
   
   oBrw:createfromcode()
   
   activate dialog oDlg
   
return nil

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 4:05 pm
by Biel EA6DD
Gracias Daniel y RenOmaS por vuestra aportaciones, las comento por orden inverso.

Daniel,
lo que quiero conseguir basicamente es lo que haces en el código que has adjuntado, bueno realmente la única difernecia es que el browse esta contenido dentro de la primera pestaña del tab.
Pero ya comente en mi primer mensaje que intentaba conseguirlo sin usar el metodo SetPrompts, y lo intento debido a que este metodo lo que hace es borrar todos los items del Tab, y despues volverlos a añadir todos, con sus nuevos titulos. En la practica produce un efecto visual algo feo, en tu ejemplo apenas si se nota la destruccion y creacion de los tabs, pero en mi aplicación con tab llenos de componentes, si se nota bastante.

RenOmaS,
tu camino si que se aproxima bastante ha conseguir lo que quiero, con el código que me has pasado, y unos pequeños retoques he conseguido cambiar el titulo del tab que deseo.
La función la he dejado así
Code: Select all  Expand view

HB_FUNC( TABSETITEM ) // hWnd, nItem, cPrompt
{
   int nItem = hb_parni( 2 );
   TCHAR pszText[256]={0};
   TC_ITEM item;
   ZeroMemory(&item, sizeof(TC_ITEM));
   item.mask = TCIF_TEXT;
   item.pszText = pszText;
   item.cchTextMax = sizeof(pszText);
   SendMessage( ( HWND ) hb_parni(1), TCM_GETITEM, nItem, ( LONG ) &item );
   #ifndef UNICODE
      item.pszText = hb_parc( 3 );
   #else
      item.pszText = AnsiToWide( hb_parc( 3 ) );
   #endif
   SendMessage(  ( HWND ) hb_parni(1), TCM_SETITEM, nItem, ( LONG ) &item );
   #ifdef UNICODE
      hb_xfree( item.pszText );
   #endif
}
 

Pero no todo podia ser perfecto, puesto que despues de ejecutar el TCM_SETITEM, el titulo del tab queda cambiado, pero los controles de tab activo han desaparecido y requieren de un repintado. Aunque el impacto del refresco es menor que si uso SetPrompts, se nota algo el parpadeo, sobre todo en el repintado del browse.

Seguire probando muchas gracias por vuestra ayuda.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 4:36 pm
by Biel EA6DD
Perfecto, ya lo he conseguido. Es algo rebuscado pero funciona bien.

Lo que hago es desactivar el repintado del tab (SendMessage( hWnd, WM_SETREDRAW , 0,0) ) , cambio el texto del item. Y para que se refresque solo el texto y no tener que repintar todo el tab, selecciono el item (TCM_SETCURSEL), y acto seguido reselecciono el item original.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 7:16 pm
by FiveWiDi
Biel EA6DD wrote:Perfecto, ya lo he conseguido. Es algo rebuscado pero funciona bien.

Lo que hago es desactivar el repintado del tab (SendMessage( hWnd, WM_SETREDRAW , 0,0) ) , cambio el texto del item. Y para que se refresque solo el texto y no tener que repintar todo el tab, selecciono el item (TCM_SETCURSEL), y acto seguido reselecciono el item original.


Biel,

podrías dejar el código o mandárselo a Antonio para poder crear un nuevo METODO a la clase tFolder.

Como lo ves?

Un saludo
Carlos G.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Tue Mar 17, 2009 9:35 pm
by Antonio Linares
Biel,

Lo que hago es desactivar el repintado del tab (SendMessage( hWnd, WM_SETREDRAW , 0,0) ) , cambio el texto del item. Y para que se refresque solo el texto y no tener que repintar todo el tab, selecciono el item (TCM_SETCURSEL), y acto seguido reselecciono el item original.


Excelente :-)

Si quieres lo anadimos como un nuevo metodo a la clase TFolder.

Re: tFolder Cambiar Prompts de las pestañas

PostPosted: Wed Mar 18, 2009 10:21 am
by Biel EA6DD
Antonio Linares wrote:
Si quieres lo anadimos como un nuevo metodo a la clase TFolder.


Por supuesto, te mando los fuentes por correo.