Ver la Versión Completa : [Duda] ToolTipText multilinea
Josber
3 de enero de 2023, 20:00
¿Hay manera de hacerlo multilinea, sin usar un control de terceros?, he intentado insertar un retorno de carro, un salto de línea y ambos, pero no hace nada
Un salu2.-
fastpho
4 de enero de 2023, 17:43
Hola @Josber, una sugerencia :
Lo que se puede hacer es tener una label o cmstatic con el caption vacio y llenarlo con lo que se necesite ver y establecerlo en Visible cuando pase el mouse sobre el control en cuestion y No visible cuando se mueva el mouse.
Saludos...
Josber
4 de enero de 2023, 19:43
@fastpho, uff, es una posibilidad pero muy costoso de hacer, hay que tener en cuenta dónde situarlo, el movimiento del ratón, coordenadas, etc.
Seguiré investigando, si veo algo bien, si no, probaré con esa idea.
Mil gracias.-
Kuk
5 de enero de 2023, 09:52
@Josber, lo estoy mirando pero de momento no veo cómo hacerlo. El problema es qu eno he encontrado la manera de de hallar el HWND del ToolTip.... :(
Se puede intentar crearlo vía WinAPI y asignárselo al control que quiera, luego enviarle un tamaño diferente y así funcionaría, según Google.
Josber
8 de enero de 2023, 20:54
Hola @Josber, una sugerencia :
Lo que se puede hacer es tener una label o cmstatic con el caption vacio y llenarlo con lo que se necesite ver y establecerlo en Visible cuando pase el mouse sobre el control en cuestion y No visible cuando se mueva el mouse.
Saludos...
Estaba dándole una vuelta al asunto pero, está el problema de que no existe un evento tipo OnMouseOver para los controles, por lo que no puedo establecer, de una manera sencilla, que el ratón pase por encima de un control en un cierto momento, supongo que, con el evento MouseMove del form, se podría hacer, pero no veas tener que estar calculándolo a cada movimiento del ratón, como tengas un ratón gaming, de tan sólo 2400 dpi, (que lo normal es 4800 ó 9600), como es mi caso, el programa se muere, amén de que has de tener en cuenta en todo momento, la posición relativa del form, porque el usuario, lo puede mover, maximizar, etc.
Un salu2.-
fastpho
9 de enero de 2023, 01:53
@Josber
Buscando otra solucion al tema del tooltip multiline mas sencilla , la solucion mas usada en el entorno visual
sin usar componentes de terceros , es utilizando WinAPI CreateWindowExA con la clase tooltips_class32,
para crear una ventana ,SetWindowPos(posicionar) , GetClientRect (posicion del control a poner el tooltip)
luego SendMessage para formatear la ventana con mensajes
Codigo VB
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type TOOLINFO
cbSize As Long
uFlags As Long
hwnd As Long
uid As Long
RECT As RECT
hinst As Long
lpszText As String
lParam As Long
End Type
Private Const CW_USEDEFAULT = &H80000000
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOSIZE = &H1
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOP = 0
Private Const HWND_TOPMOST = -1
Private Const HWND_BOTTOM = 1
Private Const WS_POPUP = &H80000000
Private Const WS_EX_TOPMOST = &H8&
Private Const WM_USER = &H400
Private Const CP_ACP = 0
Private Const CP_OEMCP = 1
Private Const WC_COMPOSITECHECK = &H200
Private Const WC_DEFAULTCHAR = &H40
Private Const WC_DEFAULTCHECK = &H100
Private Const WC_DIALOG = 8002&
Private Const WC_DISCARDNS = &H10
Private Const WC_SEPCHARS = &H20
Private Const TTDT_AUTOMATIC = 0
Private Const TTDT_AUTOPOP = 2
Private Const TTDT_INITIAL = 3
Private Const TTDT_RESHOW = 1
Private Const TTF_ABSOLUTE = &H80
Private Const TTF_CENTERTIP = &H2
Private Const TTF_DI_SETITEM = &H8000
Private Const TTF_IDISHWND = &H1
Private Const TTF_RTLREADING = &H4
Private Const TTF_SUBCLASS = &H10
Private Const TTF_TRACK = &H20
Private Const TTF_TRANSPARENT = &H100
Private Const TTM_ACTIVATE = (WM_USER + 1)
Private Const TTM_ADDTOOLA = (WM_USER + 4)
Private Const TTM_ADDTOOLW = (WM_USER + 50)
Private Const TTM_ADJUSTRECT = (WM_USER + 31)
Private Const TTM_DELTOOLA = (WM_USER + 5)
Private Const TTM_DELTOOLW = (WM_USER + 51)
Private Const TTM_ENUMTOOLSA = (WM_USER + 14)
Private Const TTM_ENUMTOOLSW = (WM_USER + 58)
Private Const TTM_GETBUBBLESIZE = (WM_USER + 30)
Private Const TTM_GETCURRENTTOOLA = (WM_USER + 15)
Private Const TTM_GETCURRENTTOOLW = (WM_USER + 59)
Private Const TTM_GETDELAYTIME = (WM_USER + 21)
Private Const TTM_GETMARGIN = (WM_USER + 27)
Private Const TTM_GETMAXTIPWIDTH = (WM_USER + 25)
Private Const TTM_GETTEXTA = (WM_USER + 11)
Private Const TTM_GETTEXTW = (WM_USER + 56)
Private Const TTM_GETTIPBKCOLOR = (WM_USER + 22)
Private Const TTM_GETTIPTEXTCOLOR = (WM_USER + 23)
Private Const TTM_GETTOOLCOUNT = (WM_USER + 13)
Private Const TTM_GETTOOLINFOA = (WM_USER + 8)
Private Const TTM_GETTOOLINFOW = (WM_USER + 53)
Private Const TTM_HITTESTA = (WM_USER + 10)
Private Const TTM_HITTESTW = (WM_USER + 55)
Private Const TTM_NEWTOOLRECTA = (WM_USER + 6)
Private Const TTM_NEWTOOLRECTW = (WM_USER + 52)
Private Const TTM_POP = (WM_USER + 28)
Private Const TTM_RELAYEVENT = (WM_USER + 7)
Private Const TTM_SETDELAYTIME = (WM_USER + 3)
Private Const TTM_SETMARGIN = (WM_USER + 26)
Private Const TTM_SETMAXTIPWIDTH = (WM_USER + 24)
Private Const TTM_SETTIPBKCOLOR = (WM_USER + 19)
Private Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
Private Const TTM_SETTITLEA = (WM_USER + 32)
Private Const TTM_SETTITLEW = (WM_USER + 33)
Private Const TTM_SETTOOLINFOA = (WM_USER + 9)
Private Const TTM_SETTOOLINFOW = (WM_USER + 54)
Private Const TTM_TRACKACTIVATE = (WM_USER + 17)
Private Const TTM_TRACKPOSITION = (WM_USER + 18)
Private Const TTM_UPDATE = (WM_USER + 29)
Private Const TTM_UPDATETIPTEXTA = (WM_USER + 12)
Private Const TTM_UPDATETIPTEXTW = (WM_USER + 57)
Private Const TTM_WINDOWFROMPOINT = (WM_USER + 16)
Private Const TTS_ALWAYSTIP = &H1
Private Const TTS_BALLOON = &H40
Private Const TTS_NOANIMATE = &H10
Private Const TTS_NOFADE = &H20
Private Const TTS_NOPREFIX = &H2
Private Const TOOLTIPS_CLASS = "tooltips_class"
Private Const TOOLTIPS_CLASSA = "tooltips_class32"
Dim ti As TOOLINFO
Dim uid As Long
uid = 0
Dim strPntr As String
Dim LPTSTR As String
strPntr = "primera linea " & vbCrLf & "segunda linea" & vbCrLf & "tercera linea " & vbCrLf & "cuarta linea "
LPTSTR = strPntr
Dim RECT As RECT
Dim RetVal As Long
hWndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASSA, 0, _
WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, _
CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0, App.hInstance, 0)
SetWindowPos hWndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE _
Or SWP_NOACTIVATE
GetClientRect Text1.hwnd, RECT
ti.cbSize = Len(ti)
ti.uFlags = TTF_CENTERTIP Or TTF_SUBCLASS
ti.hwnd = Text1.hwnd
ti.hinst = App.hInstance
ti.uid = uid
ti.lpszText = strPntr
ti.RECT.Left = RECT.Left
ti.RECT.Top = RECT.Top
ti.RECT.Right = RECT.Right
ti.RECT.Bottom = RECT.Bottom
Debug.Print "TI_:" & ti.cbSize
Debug.Print "TI_:" & ti.uFlags
Debug.Print "TI_:" & ti.hwnd
Debug.Print "TI_:" & ti.RECT.Left
Debug.Print "TI_:" & ti.RECT.Top
Debug.Print "TI_:" & ti.RECT.Right
Debug.Print "TI_:" & ti.RECT.Bottom
Debug.Print "TI_:" & ti.hinst
Debug.Print "TI_:" & ti.lpszText
Debug.Print "TI_:" & ti.lParam
SendMessage hWndTT, TTM_ADDTOOLA, 0, ti
SendMessage hWndTT, TTM_SETMAXTIPWIDTH, 0, 80
ti.lpszText = strPntr
SendMessage hWndTT, TTM_UPDATETIPTEXTA, 0, ti
SendMessage hWndTT, TTM_SETTIPBKCOLOR, RGB(255, 255, 255), 0
SendMessage hWndTT, TTM_SETTIPTEXTCOLOR, RGB(0, 0, 150), 0
SendMessage hWndTT, TTM_UPDATETIPTEXTA, 0, ti
He tratado de convertir el codigo de vb (funciona bien el codigo de vb) a pwc pero en la seccion de los mensajes me explota ,
cuando envio el primer mensaje explota el programa
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*crea la ventana
*HWND CreateWindowExA(
* [in] DWORD dwExStyle,
* [in, optional] LPCSTR lpClassName,
* [in, optional] LPCSTR lpWindowName,
* [in] DWORD dwStyle,
* [in] int X,
* [in] int Y,
* [in] int nWidth,
* [in] int nHeight,
* [in, optional] HWND hWndParent,
* [in, optional] HMENU hMenu,
* [in, optional] HINSTANCE hInstance,
* [in, optional] LPVOID lpParam
*posicion de la ventana
*BOOL SetWindowPos(
* [in] HWND hWnd,
* [in, optional] HWND hWndInsertAfter,
* [in] int X,
* [in] int Y,
* [in] int cx,
* [in] int cy,
* [in] UINT uFlags
*
*Coordenadas del control
*BOOL GetClientRect(
* [in] HWND hWnd,
* [out] LPRECT lpRect
*destruye la ventana
*BOOL DestroyWindow(
* [in] HWND hWnd
* estructura del tooltip
*typedef struct tagTOOLINFOA {
* UINT cbSize;
* UINT uFlags;
* HWND hwnd;
* UINT_PTR uId;
* RECT rect;
* HINSTANCE hinst;
* LPSTR lpszText;
* LPARAM lParam;
* void *lpReserved;
*} TTTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;
*
01 RECT. *> TYPEDEF.
05 RLEFT PIC S9(9) COMP-5.
05 RTOP PIC S9(9) COMP-5.
05 RRIGHT PIC S9(9) COMP-5.
05 RBOTTON PIC S9(9) COMP-5.
01 TOOLINFO TYPEDEF.
05 CBSIZE PIC S9(9) COMP-5.
05 UFLAGS PIC S9(9) COMP-5.
05 HWND PIC S9(9) COMP-5.
05 UID PIC S9(9) COMP-5.
05 TLEFT PIC S9(9) COMP-5.
05 TTOP PIC S9(9) COMP-5.
05 TRIGHT PIC S9(9) COMP-5.
05 TBOTTON PIC S9(9) COMP-5.
05 HINST PIC S9(9) COMP-5.
05 LPSZTEXT PIC X(50).
05 LPARAM PIC S9(9) COMP-5.
01 TI TYPE TOOLINFO .
*--------------------------------------------------------------------
01 DWSTYLE PIC S9(9) COMP-5. *> WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON
01 NULO PIC 9(9) COMP-5 VALUE 0. *> NULO
01 HWNDTT PIC S9(9) COMP-5. *> CREATE RETORNO
01 ST-HWND PIC S9(9) COMP-5. *>ME.HWND
01 ST-CTRLHWND PIC S9(9) COMP-5. *>CONTROLDESTINO.HWND
01 ST-SIZE PIC S9(9) COMP-5. *>TAMANO TOOLINFO
01 HINSTANCE PIC S9(9) COMP-5. *> VIA GetWindowLong PARA CREATE
01 GWL_HINSTANCE PIC S9(9) COMP-5 VALUE -6. *>= -6
*---------------------------------------------------------------------------
01 TOOLTIPS_CLASSA PIC X(16) VALUE "tooltips_class32".
01 WM_USER PIC S9(9) COMP-5 VALUE 1024. *>= &H400
01 WS_EX_TOPMOST PIC S9(9) COMP-5 VALUE 8. *>= &H8&
01 WP PIC X(4) VALUE X"00000080".
01 WS_POPUP REDEFINES WP PIC 9(9) COMP-5.
* 01 WS_POPUP PIC S9(9) COMP-5. *>= &H80000000
01 CWUSED PIC X(4) VALUE X"00000080".
01 CW_USEDEFAULT REDEFINES CWUSED PIC 9(9) COMP-5.
* 01 CW_USEDEFAULT PIC S9(9) COMP-5. *>= &H80000000
01 TTS_BALLOON PIC S9(9) COMP-5 VALUE 64. *>= &H40
01 TTS_NOPREFIX PIC S9(9) COMP-5 VALUE 2. *>= &H2
01 HWND_TOPMOST PIC S9(9) COMP-5 VALUE -1. *>= -1
01 SWP_NOMOVE PIC S9(9) COMP-5 VALUE 2. *>= &H2
01 SWP_NOACTIVATE PIC S9(9) COMP-5 VALUE 16. *>= &H10
01 SWP_NOSIZE PIC S9(9) COMP-5 VALUE 1. *>= &H1
01 TTF_CENTERTIP PIC S9(9) COMP-5 VALUE 2. *>= &H2
01 TTF_SUBCLASS PIC S9(9) COMP-5 VALUE 16. *>= &H10
01 TTM_ADDTOOLA PIC S9(9) COMP-5 VALUE 1028. *>= (WM_USER + 4)
01 TTM_SETMAXTIPWIDTH PIC S9(9) COMP-5 VALUE 1048. *>= (WM_USER + 24)
01 TTM_UPDATETIPTEXTA PIC S9(9) COMP-5 VALUE 1036. *>= (WM_USER + 12)
01 TTM_SETTIPBKCOLOR PIC S9(9) COMP-5 VALUE 1043. *>= (WM_USER + 19)
01 TTM_SETTIPTEXTCOLOR PIC S9(9) COMP-5 VALUE 1044. *>= (WM_USER + 20)
*VARIABLES OR
01 WSLENGHT PIC S9(9) COMP-5.
01 status-code PIC S9(9) COMP-5.
01 RETBOOL PIC S9(4) COMP-5.
PROCEDURE DIVISION.
*--------------------------------------------
*CALCULO OR DE DWSTYLE
MOVE 10 TO WSLENGHT
CALL "CBL_OR" USING WS_POPUP TTS_NOPREFIX BY VALUE WSLENGHT RETURNING status-code.
* DISPLAY TTS_NOPREFIX.
MOVE 10 TO WSLENGHT
CALL "CBL_OR" USING TTS_NOPREFIX TTS_BALLOON BY VALUE WSLENGHT RETURNING status-code.
MOVE TTS_NOPREFIX TO DWSTYLE.
* MOVE -2147483582 TO DWSTYLE *>VALOR VB
MOVE DWSTYLE TO "Text" OF TOOLTIPTEXT
* ----------------------------------------------------------
*HANDLE FORM
MOVE "hwnd" OF POW-SELf TO ST-HWND.
Move ST-HWND TO HWND OF TI.
*-----------------------------------------------------------
*INSTANCE DEL FORM
*----------------------
*GetWindowLong(hWnd, GWL_EXSTYLE) = StyleForm
CALL "GetWindowLongA" WITH stdcall LINKAGE
USING
BY VALUE ST-HWND
BY VALUE GWL_HINSTANCE
RETURNING HINSTANCE.
*-------------------------------------------------------------
* CreateWindowEx BIEN
CALL "CreateWindowExA" WITH stdcall LINKAGE
USING BY VALUE WS_EX_TOPMOST
BY REFERENCE TOOLTIPS_CLASSA
BY VALUE NULO
BY VALUE DWSTYLE *> WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON
BY VALUE CW_USEDEFAULT
BY VALUE CW_USEDEFAULT
BY VALUE CW_USEDEFAULT
BY VALUE CW_USEDEFAULT
BY VALUE ST-HWND
BY VALUE NULO
BY VALUE HINSTANCE
BY VALUE NULO
RETURNING HWNDTT.
* DISPLAY "HWNDTT:" , HWNDTT.
*----------------------------------------------------------------------
*CALCULO OR DE SWP_NOMOVE Or SWP_NOSIZE PARA SetWindowPos
MOVE 2 TO WSLENGHT
CALL "CBL_OR" USING SWP_NOMOVE SWP_NOSIZE BY VALUE WSLENGHT RETURNING status-code.
* DISPLAY SWP_NOSIZE.
*-----------------------------------------------------------------------
* SetWindowPos BIEN
CALL "SetWindowPos" WITH stdcall LINKAGE
USING
BY VALUE HWNDTT
BY VALUE HWND_TOPMOST
BY VALUE 0
BY VALUE 0
BY VALUE 0
BY VALUE 0
BY VALUE SWP_NOSIZE
RETURNING RETBOOL.
* DISPLAY "RETBOOL SetWindowPos:" , RETBOOL.
*-----------------------------------------------------------------------
* GetClientRect BIEN
MOVE "hwnd" OF TOOLTIPTEXT TO ST-CTRLHWND.
CALL "GetClientRect" WITH stdcall LINKAGE
USING
BY VALUE ST-CTRLHWND
BY REFERENCE RECT
RETURNING RETBOOL.
* DISPLAY "RETBOOL GetClientRect:" , RETBOOL.
* DISPLAY RLEFT
* DISPLAY RTOP
* DISPLAY RRIGHT
* DISPLAY RBOTTON.
*
*-----------------------------------------------------------------------
*Cargo toolinfo
*
MOVE ZEROS TO ST-SIZE.
COMPUTE ST-SIZE = FUNCTION LENGTH(TI).
MOVE ST-SIZE TO CBSIZE OF TI.
MOVE 18 TO UFLAGS OF TI. *> TTF_CENTERTIP Or TTF_SUBCLASS
MOVE ST-CTRLHWND TO HWND OF TI.
MOVE HINSTANCE TO HINST OF TI.
MOVE 0 TO UID OF TI.
MOVE "PR" & X"00" TO LPSZTEXT OF TI.
MOVE RLEFT TO TLEFT OF TI.
MOVE RTOP TO TTOP OF TI.
MOVE RRIGHT TO TRIGHT OF TI.
MOVE RBOTTON TO TBOTTON OF TI.
* DISPLAY "TI: " , CBSIZE OF TI.
* DISPLAY "TI: " , UFLAGS OF TI.
* DISPLAY "TI: " , hwnd OF TI.
* DISPLAY "TI: " , TLEFT OF TI.
* DISPLAY "TI: " , TTOP OF TI.
* DISPLAY "TI: " , TRIGHT OF TI.
* DISPLAY "TI: " , TBOTTON OF TI.
* DISPLAY "TI: " , hinst OF TI.
* DISPLAY "TI: " , lpszText OF TI.
* DISPLAY "TI: " , lParam OF TI.
*
* DISPLAY TLEFT OF TI.
* DISPLAY TTOP OF TI.
* DISPLAY TRIGHT OF TI.
* DISPLAY TBOTTON OF TI.
*
* MOVE RLEFT OF REC TO RECITEM .
*--------------------------------------------------------------------------
* SendMessage configura tooltip
* aca explota
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_ADDTOOLA
BY VALUE 0
BY REFERENCE TI.
*------------------------------------------------
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETMAXTIPWIDTH
BY VALUE 0
BY VALUE 80.
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_UPDATETIPTEXTA
BY VALUE 0
BY REFERENCE TI.
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPBKCOLOR
BY VALUE POW-COLOR-RED
BY VALUE 0.
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPTEXTCOLOR
BY VALUE POW-COLOR-WHITE
BY VALUE 0.
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_UPDATETIPTEXTA
BY VALUE POW-COLOR-WHITE
BY REFERENCE TI.
*
*
*
*
*
*
*
Saludos ....
Kuk
9 de enero de 2023, 14:12
@fastpho, corregido tu código ;)
Tienes que poner:
01 TOOLINFO TYPEDEF.
05 CBSIZE PIC S9(9) COMP-5.
05 UFLAGS PIC S9(9) COMP-5.
05 HWND PIC S9(9) COMP-5.
05 UID PIC S9(9) COMP-5.
05 TLEFT PIC S9(9) COMP-5.
05 TTOP PIC S9(9) COMP-5.
05 TRIGHT PIC S9(9) COMP-5.
05 TBOTTON PIC S9(9) COMP-5.
05 HINST PIC S9(9) COMP-5.
05 LPSZTEXT POINTER *>PIC X(50). <-------------------------------------
05 LPARAM PIC S9(9) COMP-5.
01 TI TYPE TOOLINFO .
01 TEXTO-TOOLTIP PIC X(50). *> aqui es donde vamos a meter texto
*Cargo toolinfo
*
MOVE ZEROS TO ST-SIZE.
COMPUTE ST-SIZE = FUNCTION LENGTH(TI).
MOVE ST-SIZE TO CBSIZE OF TI.
MOVE 18 TO UFLAGS OF TI. *> TTF_CENTERTIP Or TTF_SUBCLASS
MOVE ST-CTRLHWND TO HWND OF TI.
MOVE HINSTANCE TO HINST OF TI.
MOVE 0 TO UID OF TI.
MOVE "PR" & X"00" TO TEXTO-TOOLTIP *> <-------------------------------
MOVE FUNCTION ADDR(TEXTO-TOOLTIP) TO LPSZTEXT OF TI. *> <-------------------------------
MOVE RLEFT TO TLEFT OF TI.
MOVE RTOP TO TTOP OF TI.
MOVE RRIGHT TO TRIGHT OF TI.
MOVE RBOTTON TO TBOTTON OF TI.
LPSZTEXT debe ser de tipo POINTER porque no hay referencia explicita para pasarlo BY REFERENCE, así que estaba tomando los 50 bytes rompiendo completamente la estructura esperada, de ahí la violación de memoria.
fastpho
9 de enero de 2023, 15:45
@Kuk
Con el cambio a POINTER funciona perfecto , gracias...
:bien:
Saludos ...
Josber
9 de enero de 2023, 16:48
@fastpho, ¿Podrías subir el proyecto del ejemplo?, para tenerlo más claro, que un ejemplo, vale más que mil palabras ... :D :silba: :silba:
fastpho
9 de enero de 2023, 17:12
@Josber , Aca esta el proyecto :yupi:
Kuk
9 de enero de 2023, 18:13
@Josber, es un poltergeist en toda regla, leches, llevo 3 días hackeando y no sé de dónde sale el puñetero "TooltipText" que ponemos en las propiedades de un control (sea botón u otro). Un verdadero misterio. :shok:
Josber
9 de enero de 2023, 20:08
@fastpho, muchas gracias, ahora ya lo entiendo, sólo me falta encontrar donde "coixons", se cambia el color, que es feo de narices y el tipo de letra.
fastpho
9 de enero de 2023, 20:47
@Josber se puede cambiar el color del fondo y el color del texto , el tipo de letra ni idea
En proyecto subido esta pero te paso
Cambio color del fondo
*BackColor del Tooltip
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPBKCOLOR
BY VALUE POW-COLOR-DARKGRAY *> aca pones el valor que necesitas
BY VALUE 0.
Cambio de color del texto
*TextColor del Tooltip
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPTEXTCOLOR
BY VALUE POW-COLOR-WHITE *> aca poner el valor que necesitas
BY VALUE 0.
Saludos....
Josber
10 de enero de 2023, 16:35
@Josber se puede cambiar el color del fondo y el color del texto , el tipo de letra ni idea
En proyecto subido esta pero te paso
Cambio color del fondo
*BackColor del Tooltip
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPBKCOLOR
BY VALUE POW-COLOR-DARKGRAY *> aca pones el valor que necesitas
BY VALUE 0.
Cambio de color del texto
*TextColor del Tooltip
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTIPTEXTCOLOR
BY VALUE POW-COLOR-WHITE *> aca poner el valor que necesitas
BY VALUE 0.
Saludos....
Gracias @fastpho, mira que ayer, estuve repasando la rutina de arriba a abajo varias veces, modificando parámetros, (conseguí únicamente, quitar la punta de flecha del tooltip), y no encontré el del color por ningún lado, se conoce que ya estaba yo, más "espeso" de la cuenta
Un trabajo insuperable. Como dice @Kuk, habrán foros con más posts que éste pero por la calidad de los mismos, ninguno.
Un salu2.-
fastpho
10 de enero de 2023, 17:07
@Josber,
No pudiste cambiar el color ?
Podrias poner el codigo de como quitaste la flecha del tooltip
@Kuk este post no habria que moverlo al foro de powercobol+winapi
Saludos...
Josber
10 de enero de 2023, 19:33
@fastpho,
Sí, ya he podido cambiar el color, gracias, a ver para quitar la flecha, hay que cambiar éste valor
01 HWND_TOPMOST PIC S9(9) COMP-5 VALUE 1. *>= -1
en vez de valor -1, hay que ponerle valor 1
Un salu2.-
*
*
870
Josber
10 de enero de 2023, 21:18
Por cierto, los colores, se le pueden pasar en su valor decimal, si alguien necesita un programa, (con el fuente incluido), que pase el valor de los 3 colores RGB, de Hexa a Decimal, que lo diga y lo pongo por aquí.
Un salu2.-
871
Josber
11 de enero de 2023, 19:35
Si el campo está inhabilitado, (POW-FALSE TO "Enabled"), no carga el ToolTip, ¿se puede hacer que lo cargue siempre, esté como esté el control?, porque he estado repasando la rutina pero, no encuentro nada que haga referencia a algo parecido.
Graciasssss.-
fastpho
12 de enero de 2023, 02:47
@Josber, estoy de vacaciones ,y no tengo equipo para probar, pero me parece logico que no muestre la ventana tooltip creada , ya que el control esta deshabilitado , y los eventos mousemove o mouse over seguramente no levantan, por lo tanto no mostrara la ventana emergente...
:playa: :playa:
Saludos...
Josber
12 de enero de 2023, 16:07
Gracias @fastpho, perdona las molestias, que pases unas estupendas vacaciones.
Un salu2.-
fastpho
1 de marzo de 2024, 19:07
Nuevas Propiedades : Icon - Titulo - Tiempos (Visible - Delay)
*------------------------------------------------------------------------------------------
*new 01-03-2024
*> new titulo + icon
01 TTM_SETTITLE PIC S9(9) COMP-5 VALUE 1056. *>= (WM_USER + 32)
01 StrTitle PIC X(30).
01 ttIconType.
03 TTNoIcon PIC S9(9) COMP-5 VALUE 0.
03 TTIconInfo PIC S9(9) COMP-5 VALUE 1.
03 TTIconWarning PIC S9(9) COMP-5 VALUE 2.
03 TTIconError PIC S9(9) COMP-5 VALUE 3.
*> tiempos visible + delay
01 TTM_SETDELAYTIME PIC S9(9) COMP-5 VALUE 1027. *> = (WM_USER + 3)
01 TTDT_AUTOPOP PIC S9(9) COMP-5 VALUE 2.
01 TTDT_INITIAL PIC S9(9) COMP-5 VALUE 3.
01 VisibleTime PIC S9(9) COMP-5. *>
01 DelayTime PIC S9(9) COMP-5. *>
*------------------------------------------------------------------------------------------
*------------------------------------------------------------------------------------------
*new 01-03-2024
*titulo + icon.
MOVE "Titulo del ToolTip" TO StrTitle
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETTITLE
BY VALUE TTIconInfo
BY REFERENCE StrTitle.
*------------------------------------------------------------------------------------------
*new 01-03-2024
* tiempos
* VisibleTime
MOVE 1000 TO VisibleTime.
* DelayTime
MOVE 5000 TO DelayTime.
*
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETDELAYTIME
BY VALUE TTDT_AUTOPOP
BY VALUE VisibleTime.
*
CALL "SendMessageA" WITH stdcall LINKAGE
USING BY VALUE HWNDTT
BY VALUE TTM_SETDELAYTIME
BY VALUE TTDT_INITIAL
BY VALUE DelayTime.
*------------------------------------------------------------------------------------------
Saludos...
Nitzer
15 de marzo de 2024, 17:06
os mereceis un premio a la perseverancia :)
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.