FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour tFolder Cambiar Prompts de las pestañas
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
tFolder Cambiar Prompts de las pestañas
Posted: Mon Mar 16, 2009 04: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/
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Mon Mar 16, 2009 07: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 08: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/
Posts: 205
Joined: Fri Oct 07, 2005 05:07 PM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 09:11 AM
No he experimentado esto..
pero puedes tentar

basado en tabcrtl.c

Code (fw): Select all Collapse
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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 02:48 PM
Saludos Biel...

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

Code (fw): Select all Collapse
#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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 04: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 (fw): Select all Collapse
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/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 04: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/
Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 07: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 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: tFolder Cambiar Prompts de las pestañas
Posted: Tue Mar 17, 2009 09: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: tFolder Cambiar Prompts de las pestañas
Posted: 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/

Continue the discussion