Page 1 of 1

Forms o Ventanas abiertas

PostPosted: 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

PostPosted: Wed Dec 20, 2017 8:00 pm
by Antonio Linares
Xevi,

function GetAllWin() --> aWindows

Re: Forms o Ventanas abiertas

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

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

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

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

PostPosted: Thu Dec 21, 2017 5:29 pm
by hmpaquito
Xevi,

Mejor asi:

Code: Select all  Expand view
static function lCloseMainForm()
   Local nForms := 0

   AEval( GetAllWin(), {|o| If( o:IsDerivedFrom( "TWINDOW" ) .or. o:IsDerivedFrom( "TDIALOG" ), nForms ++, ) } )
   
Return nForms = 1