How to create a Dialog by clicking outside it closes?
Posted: Tue Jan 21, 2014 2:29 pm
I need to create a dialog, when user to click outside it closes.
Thanks
Thanks
www.FiveTechSoft.com
https://forums.fivetechsupport.com/
Code: Select all | Expand
#include "fivewin.ch"
Function u_Teste2()
Local oDlg
msgstop(GetFocus())
DEFINE DIALOG oDlg Title "Selecione o Ambiente" FROM 0,0 TO 500,500 PIXEL
@ 01,01 button "teste" action msgstop("1") Size 20,20 Of oDlg
ACTIVATE DIALOG oDlg On Init(DlgEndOnLostFocus(oDlg))
Return
//-------------------------------------------------------------------------//
STATIC FUNCTION DlgEndOnLostFocus(oDlg)
Local nI, o
Local bLost, aAllControls:= {}
CollectControls(oDlg, @aAllControls)
#Define lFOCUS_APPLICATION ( oWndFromHwnd(GetFocus()) != NIL )
#Define lFOCUS_NOT_DIALOG ( AScan(aAllControls, {|o| o:hWnd == GetFocus()}) == 0 )
#Define ON_FOCUS_LOST If(lFOCUS_APPLICATION .AND. lFOCUS_NOT_DIALOG, oDlg:End(), NIL)
FOR nI:= 1 to len(aAllControls)
o:= aAllControls[nI]
IF O:bLostFocus != NIL
bLost:= o:bLostFocus
o:bLostFocus:= {|x1, x2, x3, x| x:= Eval(bLost, x1, x2, x3),;
ON_FOCUS_LOST,;
x}
ELSE
o:bLostFocus:= {|x1, x2, x3, x| x:= NIL,;
ON_FOCUS_LOST,;
x}
ENDIF
NEXT
RETURN NIL
*
//-------------------------------------------------------------------------//
FUNCTION CollectControls(oDlg , aAllControls)
LOCAL nI, nJ, Obj1 , Obj2
Aadd(aAllControls, ODLG)
FOR nI:= 1 TO Len(oDlg:aControls)
Obj1:= oDlg:aControls[nI]
Aadd(aAllControls, Obj1)
IF Obj1:ClassName == "TFOLDER"
FOR nJ:= 1 TO Len(Obj1:aDialogs)
Obj2:= Obj1:aDialogs[nJ]
CollectControls(Obj2 , @aAllControls)
NEXT
ENDIF
NEXT
RETURN
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg
DEFINE DIALOG oDlg
oDlg:bStart = { || SetCapture( oDlg:hWnd ) }
ACTIVATE DIALOG oDlg CENTERED ;
ON CLICK oDlg:End()
return nil
Code: Select all | Expand
oDlg:bLostFocus := {|| oDlg:end() }
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg
DEFINE DIALOG oDlg
oDlg:bStart = { || SetCapture( oDlg:hWnd ) }
ACTIVATE DIALOG oDlg CENTERED ;
ON CLICK If( nRow < 0 .or. nCol < 0 .or. ;
nRow > oDlg:nHeight - 30 .or. nCol > oDlg:nWidth,;
oDlg:End(),)
return nil