DIALOG NOMODAL y tecla ESC

DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Thu Jan 14, 2010 3:43 pm

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  Expand view
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  Expand view
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
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby Daniel Garcia-Gil » Thu Jan 14, 2010 3:48 pm

Hola Patricio

Que version de fwh usas??
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: DIALOG NOMODAL y tecla ESC

Postby Hernan Diego Ceccarelli » Thu Jan 14, 2010 3:54 pm

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  Expand view

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

 
User avatar
Hernan Diego Ceccarelli
 
Posts: 84
Joined: Fri Oct 07, 2005 4:51 pm
Location: Rosario - Santa Fe - Argentina

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Thu Jan 14, 2010 4:13 pm

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  Expand view
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
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby Daniel Garcia-Gil » Thu Jan 14, 2010 6:05 pm

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  Expand view
METHOD KeyChar( nKey, nFlags ) CLASS TMdiChild

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

return Super:KeyChar( nKey, nFlags
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Thu Jan 14, 2010 6:50 pm

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: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC (SOLICIONADO)

Postby Patricio Avalos Aguirre » Thu Jan 14, 2010 7:21 pm

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: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Mon Jun 18, 2012 10:48 pm

Hola

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

Code: Select all  Expand view

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  Expand view
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  Expand view
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
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby Antonio Linares » Tue Jun 19, 2012 9:49 am

Patricio,

Este ejemplo funciona correctamente aqui:

TestDlgN.prg
Code: Select all  Expand view
// 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
Antonio Linares
Site Admin
 
Posts: 42052
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Tue Jun 19, 2012 2:52 pm

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  Expand view
   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
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby DevBr » Tue Jun 19, 2012 10:07 pm

Try

Code: Select all  Expand view
Activate Dialog oDlg Valid !( GetKeyState( 27 ) )
DevBr
 
Posts: 13
Joined: Mon Apr 23, 2012 7:43 am

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Tue Jun 19, 2012 11:17 pm

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
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: DIALOG NOMODAL y tecla ESC

Postby Antonio Linares » Wed Jun 20, 2012 6:45 pm

Patricio,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42052
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: DIALOG NOMODAL y tecla ESC

Postby Patricio Avalos Aguirre » Wed Jun 20, 2012 7:47 pm

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
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile


Return to FiveWin para Harbour/xHarbour

Who is online

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