Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL y WinAPI
PowerCOBOL y WinAPI Llamadas a la API de Windows en PowerCOBOL
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Operar con Textbox multilínea dmosca PowerCOBOL y COM/OLE 1 8 de mayo de 2017 10:26
[Componente] TextBox Multilinea y saltos de línea Begoguay PowerCOBOL (ActiveX, v4 - v11) 3 6 de febrero de 2017 20:55

Respuesta

  #1
Antiguo 3 de enero de 2023, 20:00
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492
Predeterminado ToolTipText multilinea
0 Inactivo Inactivo

¿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.-
Josber is offline   Responder Con Cita
  #2
Antiguo 4 de enero de 2023, 17:43
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

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...
fastpho is offline   Responder Con Cita
  #3
Antiguo 4 de enero de 2023, 19:43
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@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.-
Josber is offline   Responder Con Cita
  #4
Antiguo 5 de enero de 2023, 09:52
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #5
Antiguo 8 de enero de 2023, 20:54
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Citación del post de fastpho Ver Mensaje
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.-

Última edición por Josber fecha: 9 de enero de 2023 a las 16:55.
Josber is offline   Responder Con Cita
  #6
Antiguo 9 de enero de 2023, 01:53
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243
Tableta ToolTipText multilinea winapi
2 Inactivo Inactivo

@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
Código VB:
  1. Option Explicit
  2. 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
  3. 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
  4. 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
  5. Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  6. Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
  7. Private Type RECT
  8.         Left As Long
  9.         Top As Long
  10.         Right As Long
  11.         Bottom As Long
  12. End Type
  13. Private Type TOOLINFO
  14.     cbSize As Long
  15.     uFlags As Long
  16.     hwnd As Long
  17.     uid As Long
  18.     RECT As RECT
  19.     hinst As Long
  20.     lpszText As String
  21.     lParam As Long
  22. End Type
  23. Private Const CW_USEDEFAULT = &H80000000
  24. Private Const SWP_NOMOVE = &H2
  25. Private Const SWP_NOACTIVATE = &H10
  26. Private Const SWP_NOSIZE = &H1
  27. Private Const HWND_NOTOPMOST = -2
  28. Private Const HWND_TOP = 0
  29. Private Const HWND_TOPMOST = -1
  30. Private Const HWND_BOTTOM = 1
  31. Private Const WS_POPUP = &H80000000
  32.  
  33. Private Const WS_EX_TOPMOST = &H8&
  34. Private Const WM_USER = &H400
  35. Private Const CP_ACP = 0
  36. Private Const CP_OEMCP = 1
  37. Private Const WC_COMPOSITECHECK = &H200
  38. Private Const WC_DEFAULTCHAR = &H40
  39. Private Const WC_DEFAULTCHECK = &H100
  40. Private Const WC_DIALOG = 8002&
  41. Private Const WC_DISCARDNS = &H10
  42. Private Const WC_SEPCHARS = &H20
  43. Private Const TTDT_AUTOMATIC = 0
  44. Private Const TTDT_AUTOPOP = 2
  45. Private Const TTDT_INITIAL = 3
  46. Private Const TTDT_RESHOW = 1
  47. Private Const TTF_ABSOLUTE = &H80
  48. Private Const TTF_CENTERTIP = &H2
  49. Private Const TTF_DI_SETITEM = &H8000
  50. Private Const TTF_IDISHWND = &H1
  51. Private Const TTF_RTLREADING = &H4
  52. Private Const TTF_SUBCLASS = &H10
  53. Private Const TTF_TRACK = &H20
  54. Private Const TTF_TRANSPARENT = &H100
  55. Private Const TTM_ACTIVATE = (WM_USER + 1)
  56. Private Const TTM_ADDTOOLA = (WM_USER + 4)
  57. Private Const TTM_ADDTOOLW = (WM_USER + 50)
  58. Private Const TTM_ADJUSTRECT = (WM_USER + 31)
  59. Private Const TTM_DELTOOLA = (WM_USER + 5)
  60. Private Const TTM_DELTOOLW = (WM_USER + 51)
  61. Private Const TTM_ENUMTOOLSA = (WM_USER + 14)
  62. Private Const TTM_ENUMTOOLSW = (WM_USER + 58)
  63. Private Const TTM_GETBUBBLESIZE = (WM_USER + 30)
  64. Private Const TTM_GETCURRENTTOOLA = (WM_USER + 15)
  65. Private Const TTM_GETCURRENTTOOLW = (WM_USER + 59)
  66. Private Const TTM_GETDELAYTIME = (WM_USER + 21)
  67. Private Const TTM_GETMARGIN = (WM_USER + 27)
  68. Private Const TTM_GETMAXTIPWIDTH = (WM_USER + 25)
  69. Private Const TTM_GETTEXTA = (WM_USER + 11)
  70. Private Const TTM_GETTEXTW = (WM_USER + 56)
  71. Private Const TTM_GETTIPBKCOLOR = (WM_USER + 22)
  72. Private Const TTM_GETTIPTEXTCOLOR = (WM_USER + 23)
  73. Private Const TTM_GETTOOLCOUNT = (WM_USER + 13)
  74. Private Const TTM_GETTOOLINFOA = (WM_USER + 8)
  75. Private Const TTM_GETTOOLINFOW = (WM_USER + 53)
  76. Private Const TTM_HITTESTA = (WM_USER + 10)
  77. Private Const TTM_HITTESTW = (WM_USER + 55)
  78. Private Const TTM_NEWTOOLRECTA = (WM_USER + 6)
  79. Private Const TTM_NEWTOOLRECTW = (WM_USER + 52)
  80. Private Const TTM_POP = (WM_USER + 28)
  81. Private Const TTM_RELAYEVENT = (WM_USER + 7)
  82. Private Const TTM_SETDELAYTIME = (WM_USER + 3)
  83. Private Const TTM_SETMARGIN = (WM_USER + 26)
  84. Private Const TTM_SETMAXTIPWIDTH = (WM_USER + 24)
  85. Private Const TTM_SETTIPBKCOLOR = (WM_USER + 19)
  86. Private Const TTM_SETTIPTEXTCOLOR = (WM_USER + 20)
  87. Private Const TTM_SETTITLEA = (WM_USER + 32)
  88. Private Const TTM_SETTITLEW = (WM_USER + 33)
  89. Private Const TTM_SETTOOLINFOA = (WM_USER + 9)
  90. Private Const TTM_SETTOOLINFOW = (WM_USER + 54)
  91. Private Const TTM_TRACKACTIVATE = (WM_USER + 17)
  92. Private Const TTM_TRACKPOSITION = (WM_USER + 18)
  93. Private Const TTM_UPDATE = (WM_USER + 29)
  94. Private Const TTM_UPDATETIPTEXTA = (WM_USER + 12)
  95. Private Const TTM_UPDATETIPTEXTW = (WM_USER + 57)
  96. Private Const TTM_WINDOWFROMPOINT = (WM_USER + 16)
  97. Private Const TTS_ALWAYSTIP = &H1
  98. Private Const TTS_BALLOON = &H40
  99. Private Const TTS_NOANIMATE = &H10
  100. Private Const TTS_NOFADE = &H20
  101. Private Const TTS_NOPREFIX = &H2
  102. Private Const TOOLTIPS_CLASS = "tooltips_class"
  103. Private Const TOOLTIPS_CLASSA = "tooltips_class32"
  104.  
  105.     Dim ti As TOOLINFO
  106.     Dim uid As Long
  107.     uid = 0
  108.    
  109.    
  110.     Dim strPntr As String
  111.     Dim LPTSTR As String
  112.    
  113.    
  114.     strPntr = "primera linea " & vbCrLf & "segunda linea" & vbCrLf & "tercera linea " & vbCrLf & "cuarta linea "
  115.     LPTSTR = strPntr
  116.    
  117.    
  118.    
  119.     Dim RECT As RECT
  120.     Dim RetVal As Long
  121.    
  122.    
  123.    
  124.     hWndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASSA, 0, _
  125.             WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, _
  126.             CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0, App.hInstance, 0)
  127.  
  128.    
  129.     SetWindowPos hWndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE _
  130.                 Or SWP_NOACTIVATE
  131.    
  132.    
  133.     GetClientRect Text1.hwnd, RECT
  134.  
  135.     ti.cbSize = Len(ti)
  136.     ti.uFlags = TTF_CENTERTIP Or TTF_SUBCLASS
  137.     ti.hwnd = Text1.hwnd
  138.     ti.hinst = App.hInstance
  139.      
  140.    
  141.     ti.uid = uid
  142.     ti.lpszText = strPntr
  143.     ti.RECT.Left = RECT.Left
  144.     ti.RECT.Top = RECT.Top
  145.     ti.RECT.Right = RECT.Right
  146.     ti.RECT.Bottom = RECT.Bottom
  147.    
  148.     Debug.Print "TI_:" & ti.cbSize
  149.     Debug.Print "TI_:" & ti.uFlags
  150.     Debug.Print "TI_:" & ti.hwnd
  151.     Debug.Print "TI_:" & ti.RECT.Left
  152.     Debug.Print "TI_:" & ti.RECT.Top
  153.     Debug.Print "TI_:" & ti.RECT.Right
  154.     Debug.Print "TI_:" & ti.RECT.Bottom
  155.    
  156.     Debug.Print "TI_:" & ti.hinst
  157.     Debug.Print "TI_:" & ti.lpszText
  158.     Debug.Print "TI_:" & ti.lParam
  159.    
  160.    
  161.    
  162.     SendMessage hWndTT, TTM_ADDTOOLA, 0, ti
  163.     SendMessage hWndTT, TTM_SETMAXTIPWIDTH, 0, 80
  164.     ti.lpszText = strPntr
  165.     SendMessage hWndTT, TTM_UPDATETIPTEXTA, 0, ti
  166.     SendMessage hWndTT, TTM_SETTIPBKCOLOR, RGB(255, 255, 255), 0
  167.     SendMessage hWndTT, TTM_SETTIPTEXTCOLOR, RGB(0, 0, 150), 0
  168.     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

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4. *crea la ventana
  5. *HWND CreateWindowExA(
  6. *  [in]           DWORD     dwExStyle,
  7. *  [in, optional] LPCSTR    lpClassName,
  8. *  [in, optional] LPCSTR    lpWindowName,
  9. *  [in]           DWORD     dwStyle,
  10. *  [in]           int       X,
  11. *  [in]           int       Y,
  12. *  [in]           int       nWidth,
  13. *  [in]           int       nHeight,
  14. *  [in, optional] HWND      hWndParent,
  15. *  [in, optional] HMENU     hMenu,
  16. *  [in, optional] HINSTANCE hInstance,
  17. *  [in, optional] LPVOID    lpParam
  18. *posicion de la ventana
  19. *BOOL SetWindowPos(
  20. * [in]           HWND hWnd,
  21. * [in, optional] HWND hWndInsertAfter,
  22. * [in]           int  X,
  23. * [in]           int  Y,
  24. * [in]           int  cx,
  25. * [in]           int  cy,
  26. * [in]           UINT uFlags
  27. *
  28.  
  29. *Coordenadas del control
  30. *BOOL GetClientRect(
  31. * [in]  HWND   hWnd,
  32. * [out] LPRECT lpRect
  33.  
  34. *destruye la ventana
  35. *BOOL DestroyWindow(
  36. * [in] HWND hWnd
  37.  
  38. *  estructura del tooltip
  39. *typedef struct tagTOOLINFOA {
  40. * UINT      cbSize;
  41. * UINT      uFlags;
  42. * HWND      hwnd;
  43. * UINT_PTR  uId;
  44. * RECT      rect;
  45. * HINSTANCE hinst;
  46. * LPSTR     lpszText;
  47. * LPARAM    lParam;
  48. * void      *lpReserved;
  49. *} TTTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;
  50. *
  51.  01  RECT. *> TYPEDEF.
  52.          05  RLEFT      PIC S9(9) COMP-5.
  53.          05  RTOP       PIC S9(9) COMP-5.
  54.          05  RRIGHT     PIC S9(9) COMP-5.
  55.          05  RBOTTON        PIC S9(9) COMP-5.
  56.          
  57.  01  TOOLINFO TYPEDEF.
  58.          05  CBSIZE     PIC S9(9) COMP-5.
  59.          05  UFLAGS     PIC S9(9) COMP-5.
  60.          05  HWND           PIC S9(9) COMP-5.
  61.          05  UID            PIC S9(9) COMP-5.
  62.          05  TLEFT      PIC S9(9) COMP-5.
  63.          05  TTOP       PIC S9(9) COMP-5.
  64.          05  TRIGHT     PIC S9(9) COMP-5.
  65.          05  TBOTTON        PIC S9(9) COMP-5.
  66.          05  HINST      PIC S9(9) COMP-5.
  67.          05  LPSZTEXT       PIC X(50).
  68.          05  LPARAM               PIC S9(9) COMP-5.
  69.  01  TI TYPE    TOOLINFO .
  70. *--------------------------------------------------------------------          
  71.  01 DWSTYLE                       PIC S9(9) COMP-5. *> WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON
  72.  01 NULO                          PIC 9(9)  COMP-5 VALUE 0.    *> NULO        
  73.  01 HWNDTT        PIC S9(9) COMP-5.  *> CREATE RETORNO
  74.  01 ST-HWND       PIC S9(9) COMP-5. *>ME.HWND
  75.  01 ST-CTRLHWND   PIC S9(9) COMP-5. *>CONTROLDESTINO.HWND
  76.  01 ST-SIZE       PIC S9(9) COMP-5. *>TAMANO TOOLINFO  
  77.  01 HINSTANCE     PIC S9(9) COMP-5.  *> VIA GetWindowLong PARA CREATE
  78.  01 GWL_HINSTANCE PIC S9(9) COMP-5 VALUE -6.  *>= -6
  79.  
  80. *---------------------------------------------------------------------------
  81.  01 TOOLTIPS_CLASSA               PIC X(16) VALUE "tooltips_class32".
  82.  01 WM_USER             PIC S9(9) COMP-5 VALUE 1024. *>= &H400
  83.  01 WS_EX_TOPMOST       PIC S9(9) COMP-5 VALUE    8. *>= &H8&
  84.  
  85.  01 WP                            PIC X(4) VALUE X"00000080".
  86.  01 WS_POPUP REDEFINES WP         PIC 9(9)  COMP-5.
  87. *  01 WS_POPUP                  PIC S9(9) COMP-5. *>= &H80000000
  88.  
  89.  01 CWUSED                         PIC X(4) VALUE X"00000080".
  90.  01 CW_USEDEFAULT REDEFINES CWUSED PIC 9(9)  COMP-5.
  91. *  01 CW_USEDEFAULT             PIC S9(9) COMP-5. *>= &H80000000
  92.  
  93.  01 TTS_BALLOON                 PIC S9(9) COMP-5 VALUE    64. *>= &H40
  94.  01 TTS_NOPREFIX                PIC S9(9) COMP-5 VALUE     2. *>= &H2
  95.  01 HWND_TOPMOST                PIC S9(9) COMP-5 VALUE    -1. *>= -1
  96.  01 SWP_NOMOVE              PIC S9(9) COMP-5 VALUE     2. *>= &H2
  97.  01 SWP_NOACTIVATE      PIC S9(9) COMP-5 VALUE    16. *>= &H10
  98.  01 SWP_NOSIZE              PIC S9(9) COMP-5 VALUE     1. *>= &H1
  99.  01 TTF_CENTERTIP                 PIC S9(9) COMP-5 VALUE     2. *>= &H2
  100.  01 TTF_SUBCLASS                  PIC S9(9) COMP-5 VALUE    16. *>= &H10
  101.  01 TTM_ADDTOOLA                  PIC S9(9) COMP-5 VALUE  1028. *>= (WM_USER + 4)
  102.  01 TTM_SETMAXTIPWIDTH            PIC S9(9) COMP-5 VALUE  1048. *>= (WM_USER + 24)
  103.  01 TTM_UPDATETIPTEXTA            PIC S9(9) COMP-5 VALUE  1036. *>= (WM_USER + 12)
  104.  01 TTM_SETTIPBKCOLOR             PIC S9(9) COMP-5 VALUE  1043. *>= (WM_USER + 19)
  105.  01 TTM_SETTIPTEXTCOLOR           PIC S9(9) COMP-5 VALUE  1044. *>= (WM_USER + 20)
  106.  
  107. *VARIABLES OR
  108.  01     WSLENGHT             PIC S9(9) COMP-5.  
  109.  01     status-code          PIC S9(9) COMP-5.
  110.  01 RETBOOL                  PIC S9(4) COMP-5.
  111.  PROCEDURE       DIVISION.
  112. *--------------------------------------------
  113. *CALCULO OR DE  DWSTYLE
  114.          MOVE 10  TO WSLENGHT
  115.          CALL "CBL_OR" USING WS_POPUP TTS_NOPREFIX BY VALUE WSLENGHT RETURNING status-code.      
  116. *         DISPLAY  TTS_NOPREFIX.
  117.          MOVE 10 TO WSLENGHT
  118.          CALL "CBL_OR" USING TTS_NOPREFIX TTS_BALLOON BY VALUE WSLENGHT RETURNING status-code.      
  119.          MOVE   TTS_NOPREFIX TO DWSTYLE.
  120.        
  121.          
  122.          
  123. *        MOVE -2147483582 TO DWSTYLE *>VALOR VB
  124.          MOVE  DWSTYLE TO "Text" OF TOOLTIPTEXT
  125. * ----------------------------------------------------------
  126. *HANDLE FORM
  127.      MOVE   "hwnd"  OF  POW-SELf TO ST-HWND.
  128.      Move ST-HWND             TO    HWND OF TI.
  129. *-----------------------------------------------------------
  130.        
  131. *INSTANCE DEL FORM
  132. *----------------------
  133. *GetWindowLong(hWnd, GWL_EXSTYLE) = StyleForm
  134.       CALL "GetWindowLongA" WITH stdcall LINKAGE
  135.             USING
  136.             BY VALUE ST-HWND
  137.             BY VALUE GWL_HINSTANCE
  138.             RETURNING HINSTANCE.              
  139.  
  140.  
  141. *-------------------------------------------------------------  
  142. * CreateWindowEx BIEN
  143.        CALL "CreateWindowExA" WITH stdcall LINKAGE    
  144.          USING  BY VALUE         WS_EX_TOPMOST
  145.                 BY REFERENCE     TOOLTIPS_CLASSA
  146.                 BY VALUE         NULO
  147.                 BY VALUE         DWSTYLE *> WS_POPUP Or TTS_NOPREFIX Or TTS_BALLOON                              
  148.                 BY VALUE         CW_USEDEFAULT
  149.                 BY VALUE         CW_USEDEFAULT
  150.                 BY VALUE         CW_USEDEFAULT
  151.                 BY VALUE         CW_USEDEFAULT                
  152.                 BY VALUE         ST-HWND
  153.                 BY VALUE         NULO
  154.                 BY VALUE         HINSTANCE
  155.                 BY VALUE         NULO
  156.                
  157.          RETURNING HWNDTT.
  158. *        DISPLAY "HWNDTT:"  , HWNDTT.        
  159.    
  160. *----------------------------------------------------------------------
  161. *CALCULO OR DE  SWP_NOMOVE Or SWP_NOSIZE  PARA SetWindowPos
  162.          MOVE 2  TO WSLENGHT
  163.          CALL "CBL_OR" USING SWP_NOMOVE SWP_NOSIZE BY VALUE WSLENGHT RETURNING status-code.      
  164. *         DISPLAY  SWP_NOSIZE.
  165. *-----------------------------------------------------------------------
  166. * SetWindowPos    BIEN    
  167.              CALL "SetWindowPos" WITH stdcall LINKAGE
  168.                     USING
  169.                     BY VALUE HWNDTT
  170.                     BY VALUE HWND_TOPMOST
  171.                     BY VALUE 0
  172.                     BY VALUE 0
  173.                     BY VALUE 0
  174.                     BY VALUE 0
  175.                     BY VALUE SWP_NOSIZE
  176.                     RETURNING RETBOOL.
  177. *                   DISPLAY "RETBOOL SetWindowPos:" , RETBOOL.
  178. *-----------------------------------------------------------------------
  179. * GetClientRect BIEN
  180.             MOVE "hwnd" OF  TOOLTIPTEXT TO ST-CTRLHWND.
  181.            
  182.               CALL "GetClientRect" WITH stdcall LINKAGE
  183.                     USING
  184.                     BY VALUE ST-CTRLHWND
  185.                     BY REFERENCE  RECT
  186.                     RETURNING RETBOOL.
  187. *                    DISPLAY "RETBOOL GetClientRect:" , RETBOOL.
  188.                    
  189. *                   DISPLAY RLEFT
  190. *                   DISPLAY RTOP
  191. *                   DISPLAY RRIGHT
  192. *                   DISPLAY RBOTTON.
  193. *                  
  194. *-----------------------------------------------------------------------
  195. *Cargo toolinfo
  196. *          
  197.       MOVE ZEROS TO ST-SIZE.
  198.       COMPUTE ST-SIZE = FUNCTION LENGTH(TI).
  199.      
  200.       MOVE  ST-SIZE    TO CBSIZE OF TI.                      
  201.       MOVE  18         TO UFLAGS OF TI. *>  TTF_CENTERTIP Or TTF_SUBCLASS
  202.       MOVE ST-CTRLHWND TO HWND   OF TI.
  203.       MOVE HINSTANCE   TO HINST  OF TI.
  204.       MOVE 0           TO UID    OF TI.
  205.       MOVE "PR" & X"00" TO LPSZTEXT OF TI.
  206.      
  207.       MOVE RLEFT       TO TLEFT   OF TI.
  208.       MOVE RTOP        TO TTOP    OF TI.      
  209.       MOVE RRIGHT      TO TRIGHT  OF TI.      
  210.       MOVE RBOTTON     TO TBOTTON OF TI.  
  211.      
  212. *     DISPLAY "TI: " , CBSIZE OF TI.    
  213. *     DISPLAY "TI: " , UFLAGS  OF TI.  
  214. *     DISPLAY "TI: " , hwnd  OF TI.  
  215. *     DISPLAY "TI: " , TLEFT  OF TI.  
  216. *     DISPLAY "TI: " , TTOP  OF TI.  
  217. *     DISPLAY "TI: " , TRIGHT  OF TI.  
  218. *     DISPLAY "TI: " , TBOTTON  OF TI.  
  219. *     DISPLAY "TI: " , hinst  OF TI.  
  220. *     DISPLAY "TI: " , lpszText  OF TI.  
  221. *     DISPLAY "TI: " , lParam  OF TI.                                                  
  222. *            
  223. *                   DISPLAY TLEFT  OF TI.
  224. *                   DISPLAY TTOP OF TI.
  225. *                   DISPLAY TRIGHT OF TI.
  226. *                   DISPLAY TBOTTON OF TI.  
  227. *                        
  228.      
  229. *     MOVE RLEFT OF REC       TO RECITEM .
  230. *--------------------------------------------------------------------------
  231. * SendMessage configura tooltip
  232. * aca explota
  233.         CALL "SendMessageA" WITH stdcall LINKAGE
  234.           USING         BY VALUE HWNDTT
  235.                           BY VALUE TTM_ADDTOOLA
  236.                           BY VALUE 0
  237.                           BY REFERENCE TI.
  238. *------------------------------------------------                          
  239.         CALL "SendMessageA" WITH stdcall LINKAGE
  240.           USING BY VALUE HWNDTT
  241.                           BY VALUE TTM_SETMAXTIPWIDTH
  242.                           BY VALUE 0
  243.                           BY VALUE 80.
  244.  
  245.  
  246.         CALL "SendMessageA" WITH stdcall LINKAGE
  247.           USING BY VALUE HWNDTT
  248.                           BY VALUE TTM_UPDATETIPTEXTA
  249.                           BY VALUE 0
  250.                           BY REFERENCE TI.
  251.  
  252.  
  253.         CALL "SendMessageA" WITH stdcall LINKAGE
  254.           USING BY VALUE HWNDTT
  255.                           BY VALUE TTM_SETTIPBKCOLOR
  256.                           BY VALUE POW-COLOR-RED
  257.                           BY VALUE 0.
  258.                          
  259.         CALL "SendMessageA" WITH stdcall LINKAGE
  260.           USING BY VALUE HWNDTT
  261.                           BY VALUE TTM_SETTIPTEXTCOLOR
  262.                           BY VALUE POW-COLOR-WHITE
  263.                           BY VALUE 0.
  264.                          
  265.                          
  266.         CALL "SendMessageA" WITH stdcall LINKAGE
  267.           USING BY VALUE HWNDTT
  268.                           BY VALUE TTM_UPDATETIPTEXTA
  269.                           BY VALUE POW-COLOR-WHITE
  270.                           BY REFERENCE TI.
  271. *                                  
  272. *                        
  273. *                        
  274. *                        
  275. *    
  276. *                  
  277. *        

Saludos ....
fastpho is offline   Responder Con Cita
  #7
Antiguo 9 de enero de 2023, 14:12
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@fastpho, corregido tu código

Tienes que poner:

Código COBOL:
  1.  01  TOOLINFO TYPEDEF.
  2.          05  CBSIZE     PIC S9(9) COMP-5.
  3.          05  UFLAGS     PIC S9(9) COMP-5.
  4.          05  HWND           PIC S9(9) COMP-5.
  5.          05  UID            PIC S9(9) COMP-5.
  6.          05  TLEFT      PIC S9(9) COMP-5.
  7.          05  TTOP       PIC S9(9) COMP-5.
  8.          05  TRIGHT     PIC S9(9) COMP-5.
  9.          05  TBOTTON        PIC S9(9) COMP-5.
  10.          05  HINST      PIC S9(9) COMP-5.
  11.          05  LPSZTEXT       POINTER *>PIC X(50).  <-------------------------------------
  12.          05  LPARAM               PIC S9(9) COMP-5.
  13.  01  TI TYPE    TOOLINFO .
  14.  
  15.  01  TEXTO-TOOLTIP           PIC X(50).     *> aqui es donde vamos a meter texto

Código COBOL:
  1. *Cargo toolinfo
  2. *          
  3.       MOVE ZEROS TO ST-SIZE.
  4.       COMPUTE ST-SIZE = FUNCTION LENGTH(TI).
  5.      
  6.       MOVE  ST-SIZE    TO CBSIZE OF TI.                      
  7.       MOVE  18         TO UFLAGS OF TI. *>  TTF_CENTERTIP Or TTF_SUBCLASS
  8.       MOVE ST-CTRLHWND TO HWND   OF TI.
  9.       MOVE HINSTANCE   TO HINST  OF TI.
  10.       MOVE 0           TO UID    OF TI.
  11.       MOVE "PR" & X"00" TO TEXTO-TOOLTIP      *> <-------------------------------
  12.       MOVE FUNCTION ADDR(TEXTO-TOOLTIP) TO LPSZTEXT OF TI.  *> <-------------------------------
  13.      
  14.       MOVE RLEFT       TO TLEFT   OF TI.
  15.       MOVE RTOP        TO TTOP    OF TI.      
  16.       MOVE RRIGHT      TO TRIGHT  OF TI.      
  17.       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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #8
Antiguo 9 de enero de 2023, 15:45
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Kuk
Con el cambio a POINTER funciona perfecto , gracias...

Saludos ...
Imágenes Adjuntas
 
fastpho is offline   Responder Con Cita
  #9
Antiguo 9 de enero de 2023, 16:48
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@fastpho, ¿Podrías subir el proyecto del ejemplo?, para tenerlo más claro, que un ejemplo, vale más que mil palabras ...
Josber is offline   Responder Con Cita
  #10
Antiguo 9 de enero de 2023, 17:12
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243
Tableta ToolTipText multilinea winapi
0 Inactivo Inactivo

@Josber , Aca esta el proyecto
Archivos Adjuntos
Tipo de Archivo: zip ToolTipM.zip (0)Descargas: 38
fastpho is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:35.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.