tFolder Cambiar Prompts de las pestañas

tFolder Cambiar Prompts de las pestañas

Postby Biel EA6DD » Mon Mar 16, 2009 4:29 pm

Existe alguna manera para poder cambiar dinamicamente el Prompt de las pestañas, que no sea el metodo SetPrompts.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: tFolder Cambiar Prompts de las pestañas

Postby Patricio Avalos Aguirre » Mon Mar 16, 2009 7:42 pm

Hola

A que te refieres dinamicamente?
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: tFolder Cambiar Prompts de las pestañas

Postby Biel EA6DD » Tue Mar 17, 2009 8:19 am

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.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: tFolder Cambiar Prompts de las pestañas

Postby RenOmaS » Tue Mar 17, 2009 9:11 am

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  
}
 
Saludos/regards
RenOmaS

skype: americo.balboa
User avatar
RenOmaS
 
Posts: 205
Joined: Fri Oct 07, 2005 5:07 pm

Re: tFolder Cambiar Prompts de las pestañas

Postby Daniel Garcia-Gil » Tue Mar 17, 2009 2:48 pm

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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: tFolder Cambiar Prompts de las pestañas

Postby Biel EA6DD » Tue Mar 17, 2009 4:05 pm

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.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: tFolder Cambiar Prompts de las pestañas

Postby Biel EA6DD » Tue Mar 17, 2009 4:36 pm

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.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: tFolder Cambiar Prompts de las pestañas

Postby FiveWiDi » Tue Mar 17, 2009 7:16 pm

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.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1088
Joined: Mon Oct 10, 2005 2:38 pm

Re: tFolder Cambiar Prompts de las pestañas

Postby Antonio Linares » Tue Mar 17, 2009 9:35 pm

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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41476
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: tFolder Cambiar Prompts de las pestañas

Postby Biel EA6DD » Wed Mar 18, 2009 10:21 am

Antonio Linares wrote:
Si quieres lo anadimos como un nuevo metodo a la clase TFolder.


Por supuesto, te mando los fuentes por correo.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 122 guests