Page 1 of 1

Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 9:33 am
by VictorCasajuana
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!

Re: Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 10:26 am
by paquitohm
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.

Image

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.

Re: Tooltip sobre TSButton disabled no funciona

Posted: Tue Oct 15, 2024 11:40 am
by VictorCasajuana
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.

Image

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!

Re: Tooltip sobre TSButton disabled no funciona

Posted: Wed Oct 16, 2024 8:54 am
by Antonio Linares
He probado asi pero no parece funcionar:

Code: Select all | Expand

#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

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 8:00 am
by VictorCasajuana
He modificado esto para comprobar si realmente se ejecutaba el codeblock aún estando el botón desactivado:

Code: Select all | Expand

   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/dotne ... esktop-8.0 pero creo que la funcionalidad ShowAlways no la tenemos en el tooltip de fivewin

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 9:13 am
by Antonio Linares
Victor,

Este es el código que usa FWH para los tooltips:

Code: Select all | Expand

#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   
}
 

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 9:16 am
by Antonio Linares
Este es el código modificado para que se muestre siempre. Puedes probarlo Victor ? :-)

Code: Select all | Expand

#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  
}
 

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 1:38 pm
by Enrico Maria Giordano
It doesn't work. The problem is that a disable control does not generate the WM_MOUSEMOVE event.

Re: Tooltip sobre TSButton disabled no funciona

Posted: Thu Oct 17, 2024 5:58 pm
by Antonio Linares
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

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 9:39 am
by VictorCasajuana
Antonio Linares wrote:Este es el código modificado para que se muestre siempre. Puedes probarlo Victor ? :-)

Code: Select all | Expand

#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: Select all | Expand

#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

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 10:08 am
by Antonio Linares
gracias Victor!

Nos falta algo...

Re: Tooltip sobre TSButton disabled no funciona

Posted: Fri Oct 18, 2024 10:27 am
by Enrico Maria Giordano
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.