Page 1 of 1

DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 3:43 pm
by Patricio Avalos Aguirre
Estimados

Tengo el siguiente problema con dialog nomodal

si presiona la tecla ESC este se sale sin validar, y me deja las bases abiertas :-(

Como evitar presionar la tecla ESC que se cierre el dialogo

he colocado al inicio del programa SetDialogEsc( .F. )

Code: Select all

lEsc := .f.

REDEFINE BUTTONBMP ID 104 OF oDlg                   ;
        ACTION ( lEsc := .t., oDlg:End() )          ;
        UPDATE PROMPT "&Salir"                      ;
        BITMAP "btn_salir"                              ;
        TEXTRIGHT

ACTIVATE DIALOG oDlg CENTER ;
            VALID ( lEsc .and. ;
                        (aEval( oBrw, { |x| x:Disable(), x:cAlias := "" } ), oDlg:Disable(), ;
                        (alias_marcas)->( dbCloseArea() ), ;
                        oTdbf:Close(),;
                        oTdbf2:Close()),;
                        oMenuItem:Enable(), .t. ) NOMODAL
 
Adjunto el recurso..

Code: Select all

REPORTE_COTIZA DIALOG FIXED IMPURE 31, -13, 529, 353
STYLE WS_POPUP|WS_CAPTION|WS_VISIBLE
CAPTION "Reporte Cotizaciones"
FONT 8, "MS Sans Serif"
BEGIN
  CONTROL "Fec.Emisión", 21, "Button", BS_AUTOCHECKBOX|BS_LEFTTEXT|WS_TABSTOP, 20, 20, 52, 12
  CONTROL "", 22, "Edit", WS_VSCROLL|WS_BORDER|WS_TABSTOP, 76, 20, 56, 12
  CONTROL "", 23, "Edit", WS_VSCROLL|WS_BORDER|WS_TABSTOP, 140, 20, 60, 12
  CONTROL "Rut Cliente", 24, "Button", BS_AUTOCHECKBOX|BS_LEFT|BS_VCENTER|BS_LEFTTEXT|WS_TABSTOP, 20, 36, 52, 12
  CONTROL "", 25, "Edit", WS_BORDER|WS_TABSTOP, 76, 36, 56, 12
  CONTROL "", 26, "Edit", WS_BORDER|WS_TABSTOP, 140, 36, 72, 12
  CONTROL "", 27, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_TABSTOP, 280, 20, 93, 72
  CONTROL "", 28, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_TABSTOP, 280, 36, 93, 89
  CONTROL "", 29, "ComboBox", WS_BORDER|CBS_DROPDOWNLIST|WS_TABSTOP, 280, 52, 93, 89
  CONTROL "", 117, "Button", BS_GROUPBOX, 220, 4, 164, 64
  CONTROL "Sucursal:", 301, "Static", SS_CENTERIMAGE|WS_GROUP, 228, 20, 44, 12
  CONTROL "Marca", 302, "Static", SS_CENTERIMAGE|WS_GROUP, 228, 36, 44, 12
  CONTROL "&Consultar", 102, "Button", WS_TABSTOP, 412, 12, 64, 16
  CONTROL "&Imprimir", 103, "Button", WS_TABSTOP, 412, 28, 64, 16
  CONTROL "&Salir", 104, "Button", WS_TABSTOP, 412, 44, 64, 16
  CONTROL "", 100, "TSBrowse", WS_TABSTOP|0x00b00000, 12, 72, 508, 276
  CONTROL "Rango Fechas (optativo)", 110, "Button", BS_GROUPBOX, 12, 4, 204, 64
  CONTROL "", 122, "Button", BS_GROUPBOX, 392, 4, 121, 64
  CONTROL "Vendedor", 303, "Static", SS_CENTERIMAGE|WS_GROUP, 228, 52, 44, 12
END
 

Re: DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 3:48 pm
by Daniel Garcia-Gil
Hola Patricio

Que version de fwh usas??

Re: DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 3:54 pm
by Hernan Diego Ceccarelli
Recuerdo que en una vieja version de FWH, habia un bug relacionado con los que comentas. Es facil de fixear amigo. Revisa el METHOD End( nResult ) CLASS TDialog

Code: Select all

  if ! ::lModal
      // QUITA ESTO if ::oWnd == nil .or. Upper( ::oWnd:ClassName() ) != "TMDICHILD"
         PostMessage( ::hWnd, WM_CLOSE, nResult )
      // QUITA ESTO endif

 

Re: DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 4:13 pm
by Patricio Avalos Aguirre
Muchas Gracias por responder

Daniel, la version que uso es la FWH 9.11

Hernan, este es el metodo de la clase original, esta igual..

Code: Select all

METHOD End( nResult ) CLASS TDialog

   DEFAULT nResult := 2              // Cancel

   if ! ::lModal
      // if ::oWnd == nil .or. Upper( ::oWnd:ClassName() ) != "TMDICHILD"
         ::PostMsg( WM_CLOSE, nResult )
      // endif
   else
      if ValType( ::bValid ) == "B"
         if ! Eval( ::bValid, Self )
            return .f.
         endif
      endif
      ::nResult = nResult
      EndDialog( ::hWnd, nResult )
      // ::hWnd = 0  // Method Destroy() was not properly processed cause this
   endif

   #ifdef __HARBOUR__
      SysRefresh()
      hb_gcAll()         // Garbage collector
   #endif

return .t.
 

Re: DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 6:05 pm
by Daniel Garcia-Gil
Patricio...

seguramente tienes el dialogo dentro de una MDICHILD, esta es la que se cierra y todo lo que hay dentro...

puedes buscar validar la tecla escape en la MDICHILD antes de cerrarla o cambiar el method KeyChar de clase TMdiChild, para que trabaje con SetDialogEsc()

Code: Select all

METHOD KeyChar( nKey, nFlags ) CLASS TMdiChild

   if nKey == VK_ESCAPE
      if SetDialogEsc()
         ::End()
      endif
      return 0
   endif

return Super:KeyChar( nKey, nFlags

Re: DIALOG NOMODAL y tecla ESC

Posted: Thu Jan 14, 2010 6:50 pm
by Patricio Avalos Aguirre
Daniel

Estoy recien cambiandome a DIALOG NOMODAL, siempre he usado DIALOG MODAL

seguramente algo estoy haciendo mal, voy a probar lo que me recomiendas..

voy hacer un pequeño ejemplo para ilustrarlo y asi me puedan orientar usar estos tipos de dialogs..

muchas gracias

Re: DIALOG NOMODAL y tecla ESC (SOLICIONADO)

Posted: Thu Jan 14, 2010 7:21 pm
by Patricio Avalos Aguirre
Estimados

El error se producia por un parentisis mal colocado :-(

ACTIVATE DIALOG oDlg CENTER ;
VALID ( lEsc .and. ;
(aEval( oBrw, { |x| x:Disable(), x:cAlias := "" } ), oDlg:Disable(), ;
(alias_marcas)->( dbCloseArea() ), ;
oTdbf:Close(),;
oTdbf2:Close()),;
oMenuItem:Enable(), .t. ) NOMODA

a Cualquiera le puede pasar :mrgreen:

Re: DIALOG NOMODAL y tecla ESC

Posted: Mon Jun 18, 2012 10:48 pm
by Patricio Avalos Aguirre
Hola

Hay problemas con los DIALOG NOMODAL cuando se presiona la tecla ESC en la version FWH 12.4

Code: Select all

lEsc := .f.

REDEFINE BUTTONBMP ID 104 OF oDlg                   ;
        ACTION ( lEsc := .t., oDlg:End() )          ;
        UPDATE PROMPT "&Salir"                      ;
        BITMAP "btn_salir"                              ;
        TEXTRIGHT

ACTIVATE DIALOG oDlg CENTER ;
            VALID  lEsc;
             NOMODAL
 
se cierra sin validar este..

lo otro estoy depurando en el metod keychar(.., ) de la clase TDIALOG
colocando una alert y este metodo nunca se evalua
pero en cambio si el dialogo tiene un FOLDER si se evalua ?? y sale el mensaje alert

Code: Select all

METHOD KeyChar( nKey, nFlags ) CLASS TDialog
  ALERT( NKEY )
   if nKey == VK_ESCAPE
      if ::oWnd != nil .and. ( ::oWnd:IsKindOf( "TMDICHILD" ) .or. ;
         ::oWnd:IsKindOf( "TDIALOG" ) .or. ::oWnd:IsKindOf( "TMDIFRAME" ) )
         if SetDialogEsc() .and. ::valid()
            ::End()
         endif
      endif
      return nil
   endif

return Super:KeyChar( nKey, nFlags )
 
EN EL METODO TMDICHILD tampoco es evaluado nunca??

Code: Select all

METHOD KeyChar( nKey, nFlags ) CLASS TMdiChild

    alert( "End TMDCHILD" )

    if nKey == VK_ESCAPE
      ::End()
      return 0
   endif

return Super:KeyChar( nKey, nFlags )
 

Re: DIALOG NOMODAL y tecla ESC

Posted: Tue Jun 19, 2012 9:49 am
by Antonio Linares
Patricio,

Este ejemplo funciona correctamente aqui:

TestDlgN.prg

Code: Select all

// Testing NON-Modal Dialog Boxes

#include "fivewin.ch"

Static MainWnd

Function Main()

   DEFINE WINDOW MainWnd FROM 1, 1 TO 22, 75 ;
      TITLE "Test" ;
      MENU BuildMenu() ;
      COLOR "W/B"
      
   ACTIVATE WINDOW MainWnd MAXIMIZED ;
      VALID MsgYesNo( "Want to end ?" )
   
Return NIL

Function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM OemToAnsi( "&Try" ) ACTION Try( )

      MENUITEM "E&xit" ACTION MainWnd:End()
   ENDMENU
   
Return oMenu

Function Try()

   Local oDlg

   DEFINE DIALOG oDlg TITLE "Non modal dialog"
   
   @ 2, 2 BUTTON "&End" OF oDlg ACTION oDlg:End( )
   
   ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
      VALID MsgYesNo( "Want to close it ?" )

Return NIL

Re: DIALOG NOMODAL y tecla ESC

Posted: Tue Jun 19, 2012 2:52 pm
by Patricio Avalos Aguirre
Antonio:

he estado revisando, y al parecer el problema se produce con los botones

yo utilizo recursos

ahora el ejemplo que reproduces solo añadi el get
ahora si estas posisionado en el get funciona bien pero si te posicionas en el boton este se sale

Code: Select all

    Function Try()

       Local oDlg, a := "hola"

       DEFINE DIALOG oDlg TITLE "Non modal dialog"

         @ 1,1 GET a OF oDlg
         @ 2, 2 BUTTON "&End" OF oDlg ACTION oDlg:End( )

       ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
          VALID MsgYesNo( "Want to close it ?" )

    Return NIL
 

Re: DIALOG NOMODAL y tecla ESC

Posted: Tue Jun 19, 2012 10:07 pm
by DevBr
Try

Code: Select all

Activate Dialog oDlg Valid !( GetKeyState( 27 ) )

Re: DIALOG NOMODAL y tecla ESC

Posted: Tue Jun 19, 2012 11:17 pm
by Patricio Avalos Aguirre
Hola

Gracias, pero igual no funciona...

el problema esta en los botones, txbrowse, por ahi pasa el problema, debes estar en el foco de estos controles, los demas funciona correctamnente
GET, COMBO, DBCOMBO, ETC..
y como activo algunos opciones del menu al no pasar por estos quedan desactivados..:-(, y es solo la TECLA ESC, porque si presionas el boton salir funciona correctamente

Re: DIALOG NOMODAL y tecla ESC

Posted: Wed Jun 20, 2012 6:45 pm
by Antonio Linares
Patricio,

Confirmado el bug y estamos trabajando intentando darle caza :-)

Re: DIALOG NOMODAL y tecla ESC

Posted: Wed Jun 20, 2012 7:47 pm
by Patricio Avalos Aguirre
Antonio:

Muy bien esperemos tener la solucion pronto, gracias...