Fernando,
Gracias por contestar.
Hice las modificaciones indicadas en copias de las classes TMDICHILD y TDIALOG, y el comportamiento es el mismo.
Como explicaba antes, solamente sucede si el focus lo tiene cualquier TBUTTONBMP al momento de oprimir la tecla ESCAPE.
Lo que pretendo es que el usuario no pueda salir del DIALOG NOWAIT incrustado en MDICHILD, si oprime ESCAPE. Vale decir que este comportamiento solo es requerido en ciertos dialogs, por lo tanto, el objetivo no es deshabilitar ESCAPE en todo el programa.
Prueba el siguiente código y lo comprobarás. En este comparo las classes TBUTTONBMP vs TBTNBMP . Con la segunda funciona todo bien, pero con la otra no.
Continúo pensando que el problema está en la Class TBUTTON (Button.prg), y me estoy concentrando en eso, ya que he intentado de todo lo que he encontrado aquí en el foro, sin resultados.
- Code: Select all Expand view
//------------------------------------------------
//PRUEBA 4 MDI + MDICHILD + DIALOG NOWAIT INCRUSTADO + ESCAPE
//-------------------------------------------------
#include "FiveWin.ch"
#define COLOR_BTNFACE 15
//-------------------------------------
function Main()
local oWnd, oBar
DEFINE WINDOW oWnd TITLE "MDIChilds" MDI
DEFINE BUTTONBAR oBar _3D OF oWnd
DEFINE BUTTON OF oBar ACTION child(oWnd)
ACTIVATE WINDOW oWnd maximized
return nil
//----------------------------------------------------------------------------//
function Child(oWnd)
local oWndChild, oDlg, oBtn1, oBtn2, oBtn3, oBtn4
DEFINE WINDOW oWndChild MDICHILD OF oWnd ;
FROM 5,5 TO 6,6;
COLOR "N/W" ;
BORDER NONE NOMAXIMIZE NOMINIMIZE // prevent resizing
oWndChild:bGotFocus = { || oDlg:SetFocus() }
DEFINE DIALOG oDlg FROM 150, 150 TO 400, 600 STYLE WS_CHILD ;
OF oWndChild TITLE "Dialog from Child- Window" PIXEL TRANSPARENT
@ 36, 10 SAY "CLASS TBUTTONBMP" OF oDlg PIXEL
@ 50, 10 BUTTONBMP oBtn1 OF oDlg ACTION MsgInfo( "Prueba de Focus" ) ;
PROMPT "&Test" TEXTRIGHT SIZE 80, 20 PIXEL
@ 80, 10 BUTTONBMP oBtn2 OF oDlg ACTION oDlg:End() ;
PROMPT "&Exit" TEXTRIGHT SIZE 80, 20 PIXEL
@ 36, 150 SAY "CLASS TBTNBMP" OF oDlg PIXEL
@ 50, 150 BTNBMP oBtn3 SIZE 50, 20 OF oDlg 2007 ;
CENTER ;
PROMPT " &Focus-test" ;
ACTION MsgAlert( "Focus-test", "Attention" )
oBtn3:lTransparent = .t.
@ 80, 150 BTNBMP oBtn4 SIZE 50, 20 OF oDlg 2007 ;
CENTER ;
PROMPT " &Exit" ;
ACTION oDlg:End()
oBtn4:lTransparent = .t.
ACTIVATE DIALOG oDlg NOWAIT ;
VALID if(!GetKeyState(VK_ESCAPE), ( oWndChild:End(), .t. ), .F.) ;
ON INIT oDlg:Move(0,0)
ACTIVATE WINDOW oWndChild ;
ON INIT oWndChild:SetSize(oDlg:nWidth,oDlg:nHeight)
return nil
Nuevamente, muchas gracias por tu amabilidad.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql