bAction en el Boton ? de la barra Titulo (SOLUCIONADO)

bAction en el Boton ? de la barra Titulo (SOLUCIONADO)

Postby cuatecatl82 » Tue Sep 17, 2013 4:04 am

Saludos Maestro antonio y colegas del Foro:

De nuevo con otra pregunta, estuve revisando este post:

http://forums.fivetechsupport.com/viewtopic.php?f=3&t=13225&hilit=bHelpIcon&start=15

Necesito poner un modulo de Ayuda dentro del programa pero necesito hacerlo de forma unica incluida con el programa principal, en el post anterior indica como hacer 2 modificaciones a la clase TDialog para usar un codeblock para llamar a una función desde el boton de ayuda de la barra de titulo del dialogo, la cual trabaja como necesito, pero tiene unos inconvenientes que me gustaria corregir.

Si establesco oDlg:lHepIcon:= .F. no pasa nada, y trabaja todo bien.

Pero....
si defino en el dialogo oDlg:lHepIcon:= .T. Aparece el boton " ? ", puedo llamar a la funcion de Ayuda pero el cursor que el dialogo y los say tienen establecidos desaparecen, además de que al cerrar la ventana de mi función de Ayuda queda modificado el cursor por otro que tiene el simbolo de "?" y no se donde modificar para que no lo muestre, y para recuperar el cursor que tengo definido tengo que hacer click forzosamente en el dialogo supongo que es donde se queda en espera de saber a que control buscara su ID para mostrar su Topic de Ayuda.

Image


Como poder corregir estos detalles, dejo un archivo autocontenido para que vean de que se trata:
http://www.mediafire.com/?wvwer7e4syaqq1i

En espera de Posibles soluciones.. :x :lol: :lol: :oops: :oops:
Last edited by cuatecatl82 on Wed Sep 18, 2013 2:36 am, edited 1 time in total.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: bAction en el Boton ? de la barra Titulo

Postby cuatecatl82 » Tue Sep 17, 2013 2:20 pm

+1

Alguien ha probado el ejemplo que puse..?

Alguna sugerencia..?

Gracias.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: bAction en el Boton ? de la barra Titulo

Postby cuatecatl82 » Wed Sep 18, 2013 2:36 am

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 METHOD

MiSysComnd 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. :wink: :wink: :wink: :D :D
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 98 guests