Page 1 of 1
Forms o Ventanas abiertas
Posted: Wed Dec 20, 2017 7:43 pm
by Xevi
Necesito saber los Forms o Ventanas abiertas en mi aplicación.
Hay una función que me devuelva las oWnd/oDlg abiertas ???
Algo así como WndMain():aForms ...
Gracias.
Re: Forms o Ventanas abiertas
Posted: Wed Dec 20, 2017 8:00 pm
by Antonio Linares
Xevi,
function GetAllWin() --> aWindows
Re: Forms o Ventanas abiertas
Posted: Thu Dec 21, 2017 3:47 pm
by cmsoft
Generalmente, las ventanas se habren al llamado de una funcion o procedimiento.
Lo que puedes hacer es ir llevando un registro de cada apertura, para luego, si se vuelve a llamar estando abierta, simplemente hacer un restauracion de la ventana (tene en cuenta que las ventanas pueden estar minimizadas, o fuera de foco)
Yo lo hago de esta manera:
Code: Select all
IF ASCAN(oApp:aVentanas,ProcName()) > 0
hHand := ASCAN(oApp:aVentanas,cVentana)
oApp:oWnd:Select(hHand)
oApp:oWnd:oWndClient:aWnd[hHand]:Restore()
RETURN
ELSE
AADD(oApp:aVentanas,ProcName())
ENDIF
Espero te sirva
Re: Forms o Ventanas abiertas
Posted: Thu Dec 21, 2017 5:16 pm
by Xevi
Gracias... probaré esta solución o incluso la aprovecho para un caso en el que estava pensando.
Al final, me he creado una función (de la mano de GetAllWin()) con la que controlo el cierre de la WINDOW principal
la llamo así
ACTIVATE WINDOW oWnd CENTERED VALID lCloseMainForm()
...
Code: Select all
static function lCloseMainForm()
Local nForms := 0
AEval( GetAllWin(), {|o| If( o:ClassName() == "TWINDOW" .or. o:ClassName() == "TDIALOG" , nForms ++, ) } )
Return nForms = 1
Re: Forms o Ventanas abiertas
Posted: Thu Dec 21, 2017 5:29 pm
by hmpaquito
Xevi,
Mejor asi:
Code: Select all
static function lCloseMainForm()
Local nForms := 0
AEval( GetAllWin(), {|o| If( o:IsDerivedFrom( "TWINDOW" ) .or. o:IsDerivedFrom( "TDIALOG" ), nForms ++, ) } )
Return nForms = 1