Página 1 de 1
Fallo en Application:aForms ???
Publicado: Jue Jun 12, 2008 6:08 pm
por Bingen Ugaldebere
Buenas compañeros después de un tiempo sin pasar por acá vuelvo a dar la
lata con un problemilla.
He preparado una función muy simple para cerrar todas las MDIChild del
MDIFrame principal, para ello utilizo la tabla Application:aForms pero
que sorpresa no tiene todas las form abiertas???
La MDIFrame siempre está y luego las child que voy abriendo estan la
mayoría pero a veces falta alguna.
Lo podéis probar con este código:
**************************************************
* Cerrar todas las MDICHILD del Form Principal *
**************************************************
Function CloseAllForm()
Local nItem
For nItem:=1 to Len(Application:aForms)
Msginfo(Application:aForms[nItem]:cText+Tostring(Application :aForms[nItem]:nFormType))
If Application:aForms[nItem]:nFormType=2
Application:aForms[nItem]:Close()
Endif
Next
Return Nil
Salu2.
Fallo en Application:aForms ???
Publicado: Jue Jun 12, 2008 7:12 pm
por ignacio
Bingen,
Sin haberlo probado. Intenta:
WITH OBJECT Application
WHILE ( n := Ascan( :aForms, {|v| v:nFormType=2 ) ) > 0
:aForms[ n ]:Close()
END WHILE
END WITH
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Soporte Xailer]
[Xailer support]
"Bingen Ugaldebere" <
bingen@binarygeneration.com> escribió en el mensaje
news:48514a07$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
> Buenas compañeros después de un tiempo sin pasar por acá vuelvo a dar la
> lata con un problemilla.
>
> He preparado una función muy simple para cerrar todas las MDIChild del
> MDIFrame principal, para ello utilizo la tabla Application:aForms pero que
> sorpresa no tiene todas las form abiertas???
>
> La MDIFrame siempre está y luego las child que voy abriendo estan la
> mayoría pero a veces falta alguna.
>
> Lo podéis probar con este código:
>
> **************************************************
> * Cerrar todas las MDICHILD del Form Principal *
> **************************************************
> Function CloseAllForm()
> Local nItem
>
> For nItem:=1 to Len(Application:aForms)
>
> Msginfo(Application:aForms[nItem]:cText+Tostring(Application :aForms[nItem]:nFormType))
> If Application:aForms[nItem]:nFormType=2
> Application:aForms[nItem]:Close()
> Endif
> Next
>
> Return Nil
>
>
> Salu2.
Fallo en Application:aForms ???
Publicado: Jue Jun 12, 2008 8:50 pm
por jfgimenez
Bingen,
el problema es que estás cerrando las ventanas mientras recorres el array, y
claro, al cerrar esas ventanas se eliminan de dicho array. P.ej.: cuando
nItem=1, se elimina el primer elemento del array, y el segundo elemento pasa
a ocupar la primera posición; a continuación se incrementa nItem, pero ya te
has saltado la ventana que al principio estaba en la segunda posición del
array.
La forma más sencilla de evitar este problema es recorrer el array en
sentido inverso:
For nItem:=Len(Application:aForms) TO 1 STEP -1
...
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
Fallo en Application:aForms ???
Publicado: Jue Jun 12, 2008 9:49 pm
por Bingen Ugaldebere
Lo siento pero de las dos maneras me sigue dejando algún form abierto.
Fallo en Application:aForms ???
Publicado: Vie Jun 13, 2008 4:13 am
por Israel Solis
Bingen,
Yo lo hago con:
Application:oMainForm:oMDIClient:CloseAll()
Saludos
Israel
"Bingen Ugaldebere" <
bingen@binarygeneration.com> escribió en el mensaje
news:48514a07$[email=
1@ozsrv2.ozlan.local...]
1@ozsrv2.ozlan.local...[/email]
> Buenas compañeros después de un tiempo sin pasar por acá vuelvo a dar la
> lata con un problemilla.
>
> He preparado una función muy simple para cerrar todas las MDIChild del
> MDIFrame principal, para ello utilizo la tabla Application:aForms pero que
> sorpresa no tiene todas las form abiertas???
>
> La MDIFrame siempre está y luego las child que voy abriendo estan la
> mayoría pero a veces falta alguna.
>
> Lo podéis probar con este código:
>
> **************************************************
> * Cerrar todas las MDICHILD del Form Principal *
> **************************************************
> Function CloseAllForm()
> Local nItem
>
> For nItem:=1 to Len(Application:aForms)
>
> Msginfo(Application:aForms[nItem]:cText+Tostring(Application :aForms[nItem]:nFormType))
> If Application:aForms[nItem]:nFormType=2
> Application:aForms[nItem]:Close()
> Endif
> Next
>
> Return Nil
>
>
> Salu2.
>
Fallo en Application:aForms ???
Publicado: Vie Jun 13, 2008 4:42 am
por xAvi
Bingen,
Prueba esto suponiendo que oMainForm es el MDIFrame principal.-
AEval( Application:oMainForm:oMDIClient:aForms, {|o| o:PostMsg( WM_CLOSE, TRUE )} )
Un saludo
Xavi
Bingen Ugaldebere escribió:
> Lo siento pero de las dos maneras me sigue dejando algún form abierto.
>
Fallo en Application:aForms ???
Publicado: Lun Jun 16, 2008 12:54 pm
por Bingen Ugaldebere
Gracias Israel esta es la mas sencilla y funciona 100% Ok