Existe alguna manera para poder cambiar dinamicamente el Prompt de las pestañas, que no sea el metodo SetPrompts.
Existe alguna manera para poder cambiar dinamicamente el Prompt de las pestañas, que no sea el metodo SetPrompts.
Hola
A que te refieres dinamicamente?
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.
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
}#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 nilHB_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
}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 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.
Un Saludo
Carlos G.
FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home
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.
Antonio Linares wrote:
Si quieres lo anadimos como un nuevo metodo a la clase TFolder.