FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Tooltip sobre TSButton disabled no funciona
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM

Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 09:33 AM

Hola.

Tengo un TSButton con un tooltip y funciona correctamente, pero cuando lo pongo en :disabled() ya no se muestra el tooltip. He visto algún post al respecto con otros controles, pero no sobre un botón.

Alguna ayuda al respecto?

Gracias!

--------

¿ Y porque no ?

¿ And why not ?
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 10:26 AM
Hola Víctor,

Hace muchos años, lo menos 15, pregunté por esta característica: tooltip sobre elementos disabled.
Me respondieron que no la había y entonces me monté una a base de una clase de tooltip (ajtip, creo que se llama) y a base de modificar control.prg

Bastante heterodoxo, pero si efectivo porque aunque muestra unos tooltip que no son los estandar de windows, estos que saca son rectangulos con texto con fondo y letra configurables, pero si funcionan.



Quiza fwh ya tenga esa caracteristica o el equipo fwh la pueda desarrollar de una manera más ortodoxa

Salu2

BTW. Esos botones que se muestran en la imagen son botones SButton. El efecto apagado también lo saqué de algún sitio a base de hacer pruebas.
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 11:40 AM
paquitohm wrote:Hola Víctor,

Hace muchos años, lo menos 15, pregunté por esta característica: tooltip sobre elementos disabled.
Me respondieron que no la había y entonces me monté una a base de una clase de tooltip (ajtip, creo que se llama) y a base de modificar control.prg

Bastante heterodoxo, pero si efectivo porque aunque muestra unos tooltip que no son los estandar de windows, estos que saca son rectangulos con texto con fondo y letra configurables, pero si funcionan.



Quiza fwh ya tenga esa caracteristica o el equipo fwh la pueda desarrollar de una manera más ortodoxa

Salu2

BTW. Esos botones que se muestran en la imagen son botones SButton. El efecto apagado también lo saqué de algún sitio a base de hacer pruebas.
Gracias paquitohm, estuve viendo esos posts a los que te refieres, pero prefiero utilizar algo más nativo de fwh, si nadie comenta nada, ya miro como lo puedo solucionar.

Salud!
--------

¿ Y porque no ?

¿ And why not ?
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Wed Oct 16, 2024 08:54 AM
He probado asi pero no parece funcionar:
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oWnd, oBtn

   DEFINE WINDOW oWnd 

   @ 2, 4 BTNBMP oBtn PROMPT "Ok" SIZE 80, 20
   oBtn:Disable()
   oBtn:cTooltip = "hola"

   oWnd:bMMoved = { || oBtn:ShowTooltip( 30, 30, oBtn:cTooltip ) }

   ACTIVATE WINDOW oWnd CENTERED

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 08:00 AM
He modificado esto para comprobar si realmente se ejecutaba el codeblock aún estando el botón desactivado:
Code (fw): Select all Collapse
   oWnd:bMMoved = { || oBtn:ShowTooltip( 30, 30, oBtn:cTooltip ), hb_MemoWrit( 'test.log',Time()) }
y sí que se ejecuta, pero el tooltip no aparece, es algo nativo de Windows? me refiero a si hay un control desactivado, no muestra los tooltip?

He encontrado esta documentación al respecto: https://learn.microsoft.com/es-es/dotnet/api/system.windows.forms.tooltip?view=windowsdesktop-8.0 pero creo que la funcionalidad ShowAlways no la tenemos en el tooltip de fivewin
--------

¿ Y porque no ?

¿ And why not ?
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 09:13 AM
Victor,

Este es el código que usa FWH para los tooltips:
Code (fw): Select all Collapse
#define FKG_FORCED_USAGE

#include <Windows.h>
#include <CommCtrl.h>
#include <hbapi.h>

#ifndef TTS_BALLOON
   #define TTS_BALLOON             0x40
#endif

#ifndef TTF_TRANSPARENT
   #define TTF_TRANSPARENT 0x0100
#endif   

#ifndef TTM_SETMAXTIPWIDTH
   #define TTM_SETMAXTIPWIDTH    (WM_USER+24)
#endif   

HMODULE GetResources( void );

#define CS_DROPSHADOW  0x00020000

HB_FUNC( CREATETOOLTIP ) // hWndParent, cText, lBallon --> hWndTooltip
{
   TOOLINFO ti;
   RECT rct;
   HWND hWndParent = ( HWND ) ( LONG_PTR ) hb_parnll( 1 );
   HWND hWnd = CreateWindowEx( 0, TOOLTIPS_CLASS, NULL,
                               WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX |
                               ( hb_parl( 3 ) ? TTS_BALLOON: 0 ),
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               hWndParent, NULL, GetModuleHandle( NULL ),
                               NULL );
   DWORD dwVersion = GetVersion();
   DWORD dwWindowsMajorVersion = ( DWORD )( LOBYTE( LOWORD( dwVersion ) ) );
   DWORD dwWindowsMinorVersion = ( DWORD )( HIBYTE( LOWORD( dwVersion ) ) );

   if( ( dwWindowsMajorVersion >= 5 && dwWindowsMinorVersion >= 1 ) || ( dwWindowsMajorVersion >= 6 ) )
      SetClassLong( hWnd, GCL_STYLE, GetClassLong( hWnd, GCL_STYLE ) | CS_DROPSHADOW );

   GetClientRect ( hWndParent, &rct );

   ti.cbSize      = sizeof( TOOLINFO );
   ti.uFlags      = TTF_SUBCLASS | TTF_TRANSPARENT;
   ti.hwnd        = hWndParent;
   ti.hinst       = GetModuleHandle( NULL );
   ti.uId         = 0;
   ti.lpszText    = ( LPSTR ) hb_parc( 2 );
   ti.rect.left   = rct.left;
   ti.rect.top    = rct.top;
   ti.rect.right  = rct.right;
   ti.rect.bottom = rct.bottom;

   SendMessage( hWnd, TTM_ADDTOOL, 0, ( LPARAM ) ( LPTOOLINFO ) &ti );
   SendMessage( hWnd, TTM_ACTIVATE, TRUE, 0 );
   SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 120 );

   #ifndef _WIN64
      hb_retnl( ( LONG ) hWnd );
   #else   
      hb_retnll( ( LONGLONG ) hWnd );
   #endif   
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 09:16 AM
Este es el código modificado para que se muestre siempre. Puedes probarlo Victor ? :-)
Code (fw): Select all Collapse
#define FKG_FORCED_USAGE

#include <Windows.h>
#include <CommCtrl.h>
#include <hbapi.h>

#ifndef TTS_BALLOON
   #define TTS_BALLOON             0x40
#endif

#ifndef TTF_TRANSPARENT
   #define TTF_TRANSPARENT 0x0100
#endif  

#ifndef TTF_IDISHWND
   #define TTF_IDISHWND            0x0001
#endif

#ifndef TTM_SETMAXTIPWIDTH
   #define TTM_SETMAXTIPWIDTH    (WM_USER+24)
#endif  

HMODULE GetResources( void );

#define CS_DROPSHADOW  0x00020000

HB_FUNC( CREATETOOLTIP ) // hWndParent, cText, lBallon --> hWndTooltip
{
   TOOLINFO ti;
   RECT rct;
   HWND hWndParent = ( HWND ) ( LONG_PTR ) hb_parnll( 1 );
   HWND hWnd = CreateWindowEx( 0, TOOLTIPS_CLASS, NULL,
                               WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX |
                               ( hb_parl( 3 ) ? TTS_BALLOON: 0 ),
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               hWndParent, NULL, GetModuleHandle( NULL ),
                               NULL );
   DWORD dwVersion = GetVersion();
   DWORD dwWindowsMajorVersion = ( DWORD )( LOBYTE( LOWORD( dwVersion ) ) );
   DWORD dwWindowsMinorVersion = ( DWORD )( HIBYTE( LOWORD( dwVersion ) ) );

   if( ( dwWindowsMajorVersion >= 5 && dwWindowsMinorVersion >= 1 ) || ( dwWindowsMajorVersion >= 6 ) )
      SetClassLong( hWnd, GCL_STYLE, GetClassLong( hWnd, GCL_STYLE ) | CS_DROPSHADOW );

   GetClientRect ( hWndParent, &rct );

   ti.cbSize      = sizeof( TOOLINFO );
   ti.uFlags      = TTF_SUBCLASS | TTF_TRANSPARENT | TTF_IDISHWND;
   ti.hwnd        = hWndParent;
   ti.hinst       = GetModuleHandle( NULL );
   ti.uId         = (UINT_PTR) hWndParent; // Usamos el handle de la ventana como ID
   ti.lpszText    = ( LPSTR ) hb_parc( 2 );
   ti.rect.left   = rct.left;
   ti.rect.top    = rct.top;
   ti.rect.right  = rct.right;
   ti.rect.bottom = rct.bottom;

   SendMessage( hWnd, TTM_ADDTOOL, 0, ( LPARAM ) ( LPTOOLINFO ) &ti );
   SendMessage( hWnd, TTM_ACTIVATE, TRUE, 0 );
   SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 120 );

   #ifndef _WIN64
      hb_retnl( ( LONG ) hWnd );
   #else  
      hb_retnll( ( LONGLONG ) hWnd );
   #endif  
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 01:38 PM

It doesn't work. The problem is that a disable control does not generate the WM_MOUSEMOVE event.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 05:58 PM

Dear Enrico,

> oWnd:bMMoved = { || oBtn:ShowTooltip( 30, 30, oBtn:cTooltip ), hb_MemoWrit( 'test.log',Time()) }

We are trying to use the bMMoved of the parent

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 09:39 AM
Antonio Linares wrote:Este es el código modificado para que se muestre siempre. Puedes probarlo Victor ? :-)
Code (fw): Select all Collapse
#define FKG_FORCED_USAGE

#include <Windows.h>
#include <CommCtrl.h>
#include <hbapi.h>

#ifndef TTS_BALLOON
   #define TTS_BALLOON             0x40
#endif

#ifndef TTF_TRANSPARENT
   #define TTF_TRANSPARENT 0x0100
#endif  

#ifndef TTF_IDISHWND
   #define TTF_IDISHWND            0x0001
#endif

#ifndef TTM_SETMAXTIPWIDTH
   #define TTM_SETMAXTIPWIDTH    (WM_USER+24)
#endif  

HMODULE GetResources( void );

#define CS_DROPSHADOW  0x00020000

HB_FUNC( CREATETOOLTIP ) // hWndParent, cText, lBallon --> hWndTooltip
{
   TOOLINFO ti;
   RECT rct;
   HWND hWndParent = ( HWND ) ( LONG_PTR ) hb_parnll( 1 );
   HWND hWnd = CreateWindowEx( 0, TOOLTIPS_CLASS, NULL,
                               WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX |
                               ( hb_parl( 3 ) ? TTS_BALLOON: 0 ),
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               hWndParent, NULL, GetModuleHandle( NULL ),
                               NULL );
   DWORD dwVersion = GetVersion();
   DWORD dwWindowsMajorVersion = ( DWORD )( LOBYTE( LOWORD( dwVersion ) ) );
   DWORD dwWindowsMinorVersion = ( DWORD )( HIBYTE( LOWORD( dwVersion ) ) );

   if( ( dwWindowsMajorVersion >= 5 && dwWindowsMinorVersion >= 1 ) || ( dwWindowsMajorVersion >= 6 ) )
      SetClassLong( hWnd, GCL_STYLE, GetClassLong( hWnd, GCL_STYLE ) | CS_DROPSHADOW );

   GetClientRect ( hWndParent, &rct );

   ti.cbSize      = sizeof( TOOLINFO );
   ti.uFlags      = TTF_SUBCLASS | TTF_TRANSPARENT | TTF_IDISHWND;
   ti.hwnd        = hWndParent;
   ti.hinst       = GetModuleHandle( NULL );
   ti.uId         = (UINT_PTR) hWndParent; // Usamos el handle de la ventana como ID
   ti.lpszText    = ( LPSTR ) hb_parc( 2 );
   ti.rect.left   = rct.left;
   ti.rect.top    = rct.top;
   ti.rect.right  = rct.right;
   ti.rect.bottom = rct.bottom;

   SendMessage( hWnd, TTM_ADDTOOL, 0, ( LPARAM ) ( LPTOOLINFO ) &ti );
   SendMessage( hWnd, TTM_ACTIVATE, TRUE, 0 );
   SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 120 );

   #ifndef _WIN64
      hb_retnl( ( LONG ) hWnd );
   #else  
      hb_retnll( ( LONGLONG ) hWnd );
   #endif  
}
He realizado la prueba con el código que has indicado y el comportamiento es el mismo, el codeblock se ejecuta ( escribe en el log ) pero no muestra el tooltip
Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()

   local oWnd, oBtn

   DEFINE WINDOW oWnd

   @ 2, 4 BTNBMP oBtn PROMPT "Ok" SIZE 80, 20
   oBtn:Disable()
   oBtn:cTooltip = "hola"

   oWnd:bMMoved = { || oBtn:ShowTooltip( 30, 30, oBtn:cTooltip ), hb_MemoWrit( 'test.log',Time()) }

   ACTIVATE WINDOW oWnd CENTERED

return nil


#pragma BEGINDUMP

#define FKG_FORCED_USAGE

#include "C:\si\nlen\bcc74\include\windows\sdk\Windows.h"
#include "C:\si\nlen\bcc74\include\windows\sdk\CommCtrl.h"
#include <hbapi.h>

#ifndef TTS_BALLOON
   #define TTS_BALLOON             0x40
#endif

#ifndef TTF_TRANSPARENT
   #define TTF_TRANSPARENT 0x0100
#endif  

#ifndef TTF_IDISHWND
   #define TTF_IDISHWND            0x0001
#endif

#ifndef TTM_SETMAXTIPWIDTH
   #define TTM_SETMAXTIPWIDTH    (WM_USER+24)
#endif  

HMODULE GetResources( void );

#define CS_DROPSHADOW  0x00020000

HB_FUNC( CREATETOOLTIP ) // hWndParent, cText, lBallon --> hWndTooltip
{
   TOOLINFO ti;
   RECT rct;
   HWND hWndParent = ( HWND ) ( LONG_PTR ) hb_parnll( 1 );
   HWND hWnd = CreateWindowEx( 0, TOOLTIPS_CLASS, NULL,
                               WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX |
                               ( hb_parl( 3 ) ? TTS_BALLOON: 0 ),
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               hWndParent, NULL, GetModuleHandle( NULL ),
                               NULL );
   DWORD dwVersion = GetVersion();
   DWORD dwWindowsMajorVersion = ( DWORD )( LOBYTE( LOWORD( dwVersion ) ) );
   DWORD dwWindowsMinorVersion = ( DWORD )( HIBYTE( LOWORD( dwVersion ) ) );

   if( ( dwWindowsMajorVersion >= 5 && dwWindowsMinorVersion >= 1 ) || ( dwWindowsMajorVersion >= 6 ) )
      SetClassLong( hWnd, GCL_STYLE, GetClassLong( hWnd, GCL_STYLE ) | CS_DROPSHADOW );

   GetClientRect ( hWndParent, &rct );

   ti.cbSize      = sizeof( TOOLINFO );
   ti.uFlags      = TTF_SUBCLASS | TTF_TRANSPARENT | TTF_IDISHWND;
   ti.hwnd        = hWndParent;
   ti.hinst       = GetModuleHandle( NULL );
   ti.uId         = (UINT_PTR) hWndParent; // Usamos el handle de la ventana como ID
   ti.lpszText    = ( LPSTR ) hb_parc( 2 );
   ti.rect.left   = rct.left;
   ti.rect.top    = rct.top;
   ti.rect.right  = rct.right;
   ti.rect.bottom = rct.bottom;

   SendMessage( hWnd, TTM_ADDTOOL, 0, ( LPARAM ) ( LPTOOLINFO ) &ti );
   SendMessage( hWnd, TTM_ACTIVATE, TRUE, 0 );
   SendMessage( hWnd, TTM_SETMAXTIPWIDTH, 0, 120 );

   #ifndef _WIN64
      hb_retnl( ( LONG ) hWnd );
   #else  
      hb_retnll( ( LONGLONG ) hWnd );
   #endif  
}
 
#pragma ENDDUMP
--------

¿ Y porque no ?

¿ And why not ?
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 10:08 AM

gracias Victor!

Nos falta algo...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 10:27 AM
Antonio Linares wrote:Dear Enrico,

> oWnd:bMMoved = { || oBtn:ShowTooltip( 30, 30, oBtn:cTooltip ), hb_MemoWrit( 'test.log',Time()) }

We are trying to use the bMMoved of the parent
Ah, ok, sorry.

Continue the discussion