Cómo crear una Ayuda emergente contextual mediante WinHelp()


Avanzado: Requiere conocimientos expertos de codificación, interoperabilidad y multiusuario.
Para obtener una versión de Microsoft Access 97 de este artículo, consulte 141621 .

Resumen


Una alternativa a mostrar el sistema de ayuda en línea de la aplicación en una ventana independiente es mostrarla en una pequeña ventana emergente sombreada en la aplicación. Para ello, puede utilizar la función WinHelp() de la API de Windows con su argumento HELP_CONTEXTPOPUP. En este artículo se muestra cómo implementar un sistema de ayuda de este tipo. En este artículo se supone que está familiarizado con el uso del Taller de Ayuda de Microsoft Windows para crear archivos de Ayuda de Windows.

Más información


La función WinHelp() de la API de Windows admite un gran número de opciones. La opción HELP_CONTEXTPOPUP abre una ventana emergente sombreada en la que puede mostrar ayuda. Esta ventana es similar a la ventana que se abre al hacer clic en una entrada de glosario (verde, texto subrayado) en el sistema de Ayuda de Microsoft Access. Para implementar esta característica, siga estos pasos:
  • Cree un sistema de Ayuda en funcionamiento estableciendo las propiedades HelpContextID y HelpFile de los formularios en un archivo de Ayuda de Windows válido.
  • Redirija la tecla F1 para llamar a una función definida por el usuario que abra el archivo de Ayuda mediante la opción HELP_CONTEXTPOPUP.
Tenga en cuenta que los métodos descritos en este artículo no admiten el salto o la bifurcación a otros temas de ayuda de la ventana emergente Ayuda. Los pasos siguientes describen cómo crear la función definida por el usuario para abrir la ventana de Ayuda emergente y cómo redirigir la clave F1: CAUTION:Si sigue los pasos de este ejemplo, modifique la base de datos de ejemplo Northwind.mdb. Es posible que desee realizar una copia de seguridad del archivo Northwind.mdb y seguir estos pasos en una copia de la base de datos.

Access 2000, Access 2002 y Access 2003

  1. Iniciar Microsoft Access
  2. Abra la base de datos de ejemplo Northwind.mdb o el proyecto de ejemplo NorthwindCS.adp.
  3. En la ventana Base de datos, en la sección Objetos,haga clic en Módulos.
  4. Haga clic en Nueva.
  5. En el Editor de Visual Basic, escriba o pegue el código siguiente en la sección Declaraciones:
    Declare Function WinHelp Lib "user32" Alias "WinHelpA" _                 (ByVal hwnd As Long, _                  ByVal lpHelpFile As String, _                  ByVal wCommand As Long, _                  ByVal dwData As Long) As LongPublic Const HELP_CONTEXTPOPUP = &H8&
    NOTA: Es posible que tenga algunas funciones de la API de Microsoft Windows definidas en una biblioteca de Microsoft Access existente; por lo tanto, sus declaraciones pueden ser duplicados. Si recibe un mensaje de error de nombre de procedimiento duplicado, quite o comente la instrucción de declaraciones en el código.
  6. Anexe el código siguiente en el Editor de Visual Basic:
    Function Help32() As Boolean   On Local Error GoTo Help32_Err   Dim Cid As Long, Result As Long   On Error Resume Next   ' Get the HelpContextID of the active control.   ' The error is 2474 if no control is active.   Cid = Screen.ActiveControl.HelpContextId   If Cid = 0 Then      ' There is no control context ID, so check the form and get      ' the HelpContextID of the active form.      ' The error is 2475 if no form is active.      Cid = Screen.ActiveForm.HelpContextId   End If   ' If there is a context ID, open the Help file with context.   ' Specify your custom Help file for the second argument.   ' This example used the default help file NWIND9.HLP located   ' in the Office Samples folder.    ' If the NWIND9.HLP is not available, then replace the    ' specified path with a valid Winhelp file, and modify the code and     ' the HelpContextID of the Forms and Controls accordingly.   If Cid > 0 And Cid < 32767 Then      Result = WinHelp(Application.hWndAccessApp, _      "C:\Program Files\Microsoft Office\Office\Samples\nwind9.hlp", _      HELP_CONTEXTPOPUP, Cid)      Help32 = True   End IfHelp32_End:   Exit FunctionHelp32_Err:   MsgBox Err.Description   Resume Help32_EndEnd Function
  7. Guarde el módulo como HelpModule.
  8. Cierre el Editor de Visual Basic.
  9. En la ventana Base de datos, en la sección Objetos,haga clic en Macros.
  10. Haga clic en Nueva.
  11. Cree la siguiente macro nueva para redirigir la clave F1:
       Macro Name     Action       Action Arguments   --------------------------------------------------------      {F1}        RunCode      Function Name: Help32() 
  12. Guarde la macro como AutoKeysy, a continuación, cierre la macro.
  13. En la ventana Base de datos, en la sección Objetos,haga clic en Formularios.
  14. En el panel derecho, haga doble clic en Proveedores.
  15. Pulse la tecla F1.
Observe que Microsoft Access muestra el mensaje de ayuda, correspondiente al helpContextID del control o del formulario, en un cuadro emergente.

Acceso 2007

  1. Iniciar Microsoft Access
  2. Abra la base de datos de ejemplo Northwind2007.accdb.
  3. En la pestaña Crear, haga clic en la flecha abajo debajo de Macroy, a continuación, haga clic en Módulo.
  4. En el Editor de Visual Basic, pegue el ejemplo de código siguiente en la sección Declaraciones.
    Declare Function WinHelp Lib "user32" Alias "WinHelpA" _                 (ByVal hwnd As Long, _                  ByVal lpHelpFile As String, _                  ByVal wCommand As Long, _                  ByVal dwData As Long) As LongPublic Const HELP_CONTEXTPOPUP = &H8&
    Nota Es posible que tenga algunas funciones de la API de Microsoft Windows definidas en una biblioteca de Microsoft Access existente; por lo tanto, sus declaraciones pueden ser duplicados. Si recibe un mensaje de error de nombre de procedimiento duplicado, quite o comente la instrucción de declaraciones en el código.
  5. Anexe el ejemplo de código siguiente en el Editor de Visual Basic.
    Function Help32() As Boolean   On Local Error GoTo Help32_Err   Dim Cid As Long, Result As Long   On Error Resume Next   ' Get the HelpContextID of the active control.   ' The error is 2474 if no control is active.   Cid = Screen.ActiveControl.HelpContextId   If Cid = 0 Then      ' There is no control context ID, so check the form and get      ' the HelpContextID of the active form.      ' The error is 2475 if no form is active.      Cid = Screen.ActiveForm.HelpContextId   End If   ' If there is a context ID, open the Help file with context.   ' Specify your custom Help file for the second argument.   ' This example used the default help file NWIND9.HLP located   ' in the Office Samples folder.    ' If the NWIND9.HLP is not available, then replace the    ' specified path with a valid Winhelp file, and modify the code and     ' the HelpContextID of the Forms and Controls accordingly.   If Cid > 0 And Cid < 32767 Then      Result = WinHelp(Application.hWndAccessApp, _      "C:\Program Files\Microsoft Office\Office\Samples\nwind9.hlp", _      HELP_CONTEXTPOPUP, Cid)      Help32 = True   End IfHelp32_End:   Exit FunctionHelp32_Err:   MsgBox Err.Description   Resume Help32_EndEnd Function
  6. Guarde el módulo como HelpModule.
  7. Cierre el Editor de Visual Basic.
  8. En la ficha Crear , haga clic en Macro.
  9. Cree la siguiente macro nueva para redirigir la clave F1:
       Macro Name     Action       Action Arguments   --------------------------------------------------------      {F1}        RunCode      Function Name: Help32() 
  10. Guarde la macro como AutoKeys y, a continuación, cierre la macro.
  11. Haga clic en Proveedores en el panel izquierdo.
  12. En el panel izquierdo, haga doble clic en Lista de proveedores.
  13. Pulse la tecla F1.
Observe que Microsoft Access muestra el mensaje de ayuda, correspondiente al helpContextID del control o del formulario, en un cuadro emergente.

Referencias


Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
828419 Cómo crear un sistema de Ayuda HTML mediante la API HTMLHelp o la Ayuda HTML en Access
242433 Cómo crear archivos de Ayuda HTML sensibles al contexto