Código genérico corregido para ActiveX

15/03/2020

 

Autor: Christof Wollenhaupt y Carlos Alloatti

Después de leer mi artículo ActiveFiX que trataba sobre la no respuesta de controles ActiveX, Carlos Alloatti llegó a una solución genérica del problema:

  *!* Habilitar ventanas de controles ActiveX

  #Define GW_CHILD 5
  #Define GW_HWNDNEXT 2
 
  Declare Integer GetWindow In win32api As apiGetWindow ;
   Integer nhWnd, ;
   Integer uCmd

  Declare Integer RealGetWindowClass In win32api ;
   As apiRealGetWindowClass ;
   Integer nhWnd, ;
   String @pszType, ;
   Integer cchType

  Declare Integer EnableWindow In win32api As apiEnableWindow ;
   Integer nhWnd, ;
   Integer bEnable

  Local ;
   m.lnChildHWnd As Integer, ;
   m.lnCmd As Integer, ;
   m.lnEnable As Integer, ;
   m.lcClassName As String, ;
   m.lnBufferLen As Integer

  *!* Para probar, cambie  m.lnEnable a 0
  *!* para inhabilitar las ventanas OleControl
  m.lnEnable = 1

  If Thisform.ShowWindow = 2 Or Thisform.ScrollBars > 0 Then
   m.lnChildHWnd = apiGetWindow(Thisform.HWnd, GW_CHILD)
  Else
   m.lnChildHWnd = Thisform.HWnd
  Endif 
  
  m.lnCmd = GW_CHILD
 
  Do While .T.
   m.lnChildHWnd = apiGetWindow(m.lnChildHWnd, m.lnCmd)
   If m.lnChildHWnd = 0 Then
     Exit
   Endif

   m.lcClassName = Space(254)
   m.lnBufferLen = apiRealGetWindowClass(m.lnChildHWnd, ;
     @m.lcClassName, Len(m.lcClassName))
     m.lcClassName = Left(m.lcClassName , m.lnBufferLen)

   If m.lcClassName == "CtlFrameWork_ReflectWindow" Then
     apiEnableWindow(m.lnChildHWnd, m.lnEnable)
   Endif

   m.lnCmd = GW_HWNDNEXT
  Enddo

 

Vea también

ActiveFiX

Tema principal Active X

 

 


 

Referencias

Artículo original: ActiveX generic fix
http://www.foxpert.com/knowlbits_200804_1.htm
Autor: Christof Wollenhaupt y Carlos Alloatti
Traducido por: Ana María Bisbé York

 


 

 

 



error: Contenido protegido