FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Thu Jan 25, 2007 05:24 PM

Antonio necesito tu ayuda, estoy atorado con lo siguiente:

Los tooltips en la Clase TOOLBAR tienen un limite de 40 caracteres de largo. Hay alguna forma de poder ampliarlo a, por ejemplo, 120.

En la clase Window pude lograr un ancho de 120 con:
SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 120)

Funciona muy bien, pero no con ToolBar. Parece que esta invoca a una funci贸n diferente para construir los ToolTips. He probado de todo y no lo he logrado. Alguna sugerencia ?

Tampoco funciona:
oToolBar1:SetTextRows(3) ni
nRows := 2
SendMessage( oToolBar1:hWnd, TB_SETMAXTEXTROWS, nRows, 0 )

Tengo FWH 2.7 de Agosto 2006, xHarbour 0.99.61 y BCC 5.5

Saludos y gracias por tu atenci贸n,

Carlos Gallego

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Thu Jan 25, 2007 06:58 PM
Carlos,

Para asignar el texto a los tooltips usamos el dato szText de la estructura NMTTDISPINFO que por definici贸n es as铆 (como ves esta limitado a 40 caracteres unicode (80 bytes)):
typedef struct tagNMTTDISPINFOA {
    NMHDR hdr;
    LPSTR lpszText;
    char szText[80];
    HINSTANCE hinst;
    UINT uFlags;
#if (_WIN32_IE >= 0x0300)
    LPARAM lParam;
#endif
} NMTTDISPINFOA, FAR *LPNMTTDISPINFOA;

Seg煤n el API de Windows para textos superiores a los 40 caracteres (ya que szText usa unicode) hay que usar lpstText y hacer hinst = NULL, pero lo hemos probado y no funciona.
Te copiamos aqui la funci贸n que necesitas por si quieres hacer pruebas:
HB_FUNC( TTNSETTEXT ) // pNMTTDISPINFO, cTooltipText
{
   LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 );

   MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
                        ( LPCSTR ) hb_parc( 2 ), -1, ( LPWSTR ) pti->szText,
                        hb_parclen( 2 ) + 1 );

   pti->hinst = NULL;
   pti->lpszText = NULL;
   pti->uFlags = 0;
}

Prueba a ponerle un "_" delante del nombre y llama a esta funci贸n desde la Clase ToolBar
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Thu Jan 25, 2007 07:01 PM
En teor铆a este es el c贸digo que debiera funcionar:
HB_FUNC( TTNSETTEXT ) // pNMTTDISPINFO, cTooltipText 
{ 
   LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 ); 
   static char buffer[ 200 ];

   MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED, 
                        ( LPCSTR ) hb_parc( 2 ), -1, buffer, 
                        hb_parclen( 2 ) + 1 ); 

   pti->hinst = NULL; 
   pti->lpszText = buffer; 
   pti->uFlags = 0; 
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 214
Joined: Sat Aug 19, 2006 01:37 PM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Thu Jan 25, 2007 08:23 PM

Antonio disculpa lo inpertinente...

pero todo este codigo es un lenguaje acaso es C

o cual

(Editado por Antonio: S铆, es C )

Mi segundo amor es Programar
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Fri Jan 26, 2007 03:31 AM

Antonio, gracias por tu respuesta.

No funcion贸.

En el primer caso,

HB_FUNC( TTNSETTEXT ) // pNMTTDISPINFO, cTooltipText
{
LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 );

MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
( LPCSTR ) hb_parc( 2 ), -1, ( LPWSTR ) pti->szText,
hb_parclen( 2 ) + 1 );

pti->hinst = NULL;
pti->lpszText = NULL;
pti->uFlags = 0;
}

pone la misma longitud, 40 caracteres y corta el exceso sobre 40.

En el segundo caso,

HB_FUNC( TTNSETTEXT ) // pNMTTDISPINFO, cTooltipText
{
LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 );
static char buffer[ 200 ];

MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
( LPCSTR ) hb_parc( 2 ), -1, buffer,
hb_parclen( 2 ) + 1 );

pti->hinst = NULL;
pti->lpszText = buffer;
pti->uFlags = 0;
}

no pinta nada. Parece que es la caracter铆stica de buffer. Ser谩 que incide en algo el tipo de variable, por ejemplo LPWSTR ? He probado pero tampoco sale nada.

Agradezco mucho tu ayuda. Un cliente me tiene loco pues quiere poner en los tooltips mensajes de hasta 180 caracteres, as铆 como poder poner en 2 l铆neas el prompt de TBBUTTON y debo entregar con urgencia la aplicaci贸n.

Nuevamente anticipo mi agradecimiento por tu ayuda.

Saludos,

Carlos Gallego

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Fri Jan 26, 2007 08:42 AM

Carlos,

Como te he indicado, Microsoft tiene la limitaci贸n char szText[80]; de ah铆 que s贸lo se visualicen 40 caracteres.

La funci贸n modificada TTNSETTEXT() deber铆a funcionar pero no lo hace. As铆 que hasta que aparezca una posible soluci贸n, tendr谩s que indicarle a tu cliente que no se puede y que hay que hacerlo de otra forma

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM
Antonio Linares por favor Ayudaaaa con TOOLTIPS EN TOOLBAR
Posted: Fri Jan 26, 2007 06:02 PM

Antonio, entiendido :(

Esta limitaci贸n aplica SOLO a TOOLBARS porque en los dem谩s controles no hay problema. En todas mis aplicaciones tengo los ToolTips seteados para que muestran hasta 100 caracteres de ancho por l铆nea.

Para esto en Windows.prg en el m茅todo ShowToolTip() puse:
SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 573)

Si en cualquier control, inclu铆do BUTTONBAR (excepto TOOLBAR), pones un

oCtrlxxx:cToolTip:="123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 1234567890"

ver谩s que te pone en una sola l铆nea toda la cadena.

Es decir, la limitante s贸lo aplica para TOOLBAR. Estoy en lo correcto ?

Saludos,

Carlos Gallego

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Continue the discussion