DIALOG NOMODAL y tecla ESC

Post Reply
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

DIALOG NOMODAL y tecla ESC

Post 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
 
Last edited by Patricio Avalos Aguirre on Mon Jun 18, 2012 10:48 pm, edited 2 times in total.
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post by Daniel Garcia-Gil »

Hola Patricio

Que version de fwh usas??
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Hernan Diego Ceccarelli
Posts: 84
Joined: Fri Oct 07, 2005 4:51 pm
Location: Rosario - Santa Fe - Argentina
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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

 
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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.
 
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC (SOLICIONADO)

Post 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:
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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 )
 
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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
 
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
DevBr
Posts: 13
Joined: Mon Apr 23, 2012 7:43 am

Re: DIALOG NOMODAL y tecla ESC

Post by DevBr »

Try

Code: Select all

Activate Dialog oDlg Valid !( GetKeyState( 27 ) )
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post 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
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post by Antonio Linares »

Patricio,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Re: DIALOG NOMODAL y tecla ESC

Post by Patricio Avalos Aguirre »

Antonio:

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

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Post Reply