Solucionado señores:
Después de revisar y probar con detenimiento los metodos de la Clase TDialog pude solucionar los detalles que tenia pendiente, aqui como quedo:
- Code: Select all Expand view RUN
# Include "FiveWin.ch"
# Include "xHbCls.ch"
# Define GWL_EXSTYLE -20
# Define WS_EX_CONTEXTHELP 1024
# Define SC_CLOSE 61536
# Define SC_HELP 61824
FUNCTION Main()
LOCAL oDlg, oBmp, oBtn, oSay
LOCAL cText:= "El Cursor del Mouse FLECHA VERDE para el Dialogo y el Say se muestra correcto"
EXTEND CLASS TDialog WITH DATA bHelpIcon
OVERRIDE METHOD SysCommand IN CLASS TDialog WITH MiSysComnd
DEFINE CURSOR oCur RESOURCE "OPCION"
DEFINE CURSOR oSel RESOURCE "MANO"
DEFINE ICON oIco RESOURCE "01"
DEFINE DIALOG oDlg RESOURCE "MENSAJE" TITLE "Bug en Help de TDialog" ICON oIco
REDEFINE IMAGE oBmp ID 100 RESOURCE "02" OF oDlg TRANSPARENT ADJUST
REDEFINE SAY oSay ID 101 PROMPT cText
REDEFINE BUTTONBMP oBtn TEXTRIGHT BITMAP "ACEPTAR" ACTION (oDlg:END()) ID 102 OF oDlg
oDlg:lHelpIcon:= .F.
oDlg:bHelpIcon:= {|| MSGInfo("Se ha llamado a la Ayuda","En Costrucción") }
oDlg:oCursor:= oCur
oSay:oCursor:= oCur
oBmp:oCursor:= oCur
oBtn:oCursor:= oSel
ACTIVATE DIALOG oDlg CENTERED ON INIT(SetWindowLong( oDlg:hWnd, GWL_EXSTYLE,;
nOr( GetWindowLong( oDlg:hWnd, GWL_EXSTYLE ), WS_EX_CONTEXTHELP ) ))
RETURN Nil
//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION MiSysComnd(nWParam, nLParam)
LOCAL Self:= qSelf()
IF nWParam == SC_CLOSE .AND. ::lModal
IF GetCapture() != 0
ReleaseCapture()
ENDIF
RETURN .F.
ENDIF
IF nWParam == SC_HELP
IF VALTYPE( ::bHelpIcon ) == "B"
EVAL( ::bHelpIcon, Self )
ENDIF
RETURN .T.
ENDIF
RETURN Nil
//-----------------------------------------------------------------------------------------------------------------//
FUNCTION HelpIndex()
//Para Deshabilitar la llamada de ayuda desde Help32.prg del Api de Windows con la tecla F1
RETURN Nil
La idea es de mantener mis proyectos lo más independiente posible sin agregar los fuentes de las Clases de Fivewin modificados para no depender de futuras versiones y mejoras haciendo uso de OVERRIDE Y EXTEND para modificar los metodos de las Clases desde dentro de mis fuentes:
Observaciones:Al establecer oDlg:lHelpIcon:= .T. Se muestra el boton "?" nativo de TDialog, pero desactiva el Cursor definido para los Say y el Dialogo, para quitar este defecto lo desactivo
oDlg:lHelpIcon:= .F. para mostrar el boton de forma independiente lo
invoco desde
On Init().
Al hacer click en el boton se activa la ayuda del API, para desactivarlo añadimos la función
HelpIndex() retornando "Nil" ya que aqui es donde aparece el aviso de que no se encuentra la ayuda desde SetHelpFile(),
Aqui es donde aplica añadir el metodo
bHelpIcon, lo hago desde mi archivo fuente con
EXTEND CLASS y ahora modificamos la Clase
SysCommand que es llamada para mostrar la ayuda, pero invocaremos a nuestra función que estará modifcada con
OVERRIDE METHODMiSysComnd Tiene 2 partes: la primera es para hacer click en el boton "X" o Cerrar, la segunda es para el boton "?", si bHelpIcon es un codeblock se evalua y ejecuta la ayuda, al terminar estaba
::lHelpIcon = .t. "Esto hacia que el cursor cambiara a una flecha con un simbolo de ayuda", al quitarlo el cursor ya no aparece, pero se queda el click del mouse capturado obligando a hacer un click dentro del dialogo para activar cualquier control, esto se resuelve cambiando
RETURN .F. por
RETURN .T. y vuala... Enigma resuelto.
Ahora si con estas pequeñas modificaciones ya se puede invocar de forma correcta a una función de ayuda independiente a los archivos .HLP y .CHM.
Espero les sirva y perdón por tanto cuento, pero creo que vale la pena explicar un poquito la logica del funcionamiento..
Saludos.