Power Builder - Saber si existen ventanas abiertas

 
Vista:

Saber si existen ventanas abiertas

Publicado por achafio (88 intervenciones) el 26/11/2009 13:00:27
Como puedo saber si en mi sistemas existen ventanas abiertas, se que con isvalid puedo saber si una ventana especifica está abierta, pero lo que necesito es saber si existe ventanas sin especificar el nombre se encuentre abiertas.

Para mayor entendimiento tengo que abrir una ventana que realiza un proceso pero para realizar el proceso de dicha ventana necesito que no exista ninguna otra ventana abierta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Saber si existen ventanas abiertas

Publicado por miguell (153 intervenciones) el 27/11/2009 08:50:46
si tu aplicación es de tipo MDI. (quiere decir que tu ventana principal, la que abres desde el objeto de aplicación es de tipo MDI (con o sin microhelp) y que el resto de las ventanas se abren con "OpenSheet"), la cosa es facil:
-------------------------
int li_Count
window lw_Sheet

/* devuelve número de 'hojas' abiertas (hoja es ventana abierta con opensheet )*/
lw_Sheet = this.GetFirstSheet ()
if IsValid (lw_Sheet) then
do
li_Count += 1
lw_Sheet = this.GetNextSheet (lw_Sheet)
loop while IsValid (lw_Sheet)
end if

return li_count
------------------------------
el anterior código lo he sacado de una función que te devuelve la cantidad de ventanas/hojas abiertas. En tu caso lo puedes adaptar a que salga al encontrar la primera:

window lw_Sheet

lw_Sheet = this.GetFirstSheet ()
if IsValid (lw_Sheet) then
// entonces hay por lo menos una ventana sheet abierta
return 'hay ventana abierta'
end if

return 'no hay ninguna ventana abierta'

-----------------------------------------------------
si quieres cerrar todas las hojas directamente, puedes usar el siguiente código:
---
window lw_ventana

lw_ventana = gw_mdi.getActiveSheet()
do while isvalid(lw_ventana)
close(lw_ventana)
lw_ventana = gw_mdi.getActiveSheet()
loop

----------------------------------
----------------------------------
si no tienes montada la aplicacíón al estilo MDI, entonces creo que lo mejor que puedes hacer es (aunque habrá que preguntarse primero si es posible que tengas más de una abierta a la vez si son todas modales ...):
------------
-heredar todas tus ventanas de una ventana ancestor en común. (lo puedes conseguir exportando y importando sus códigos (o 'edit source')
-codificar el open de esa ventana ancestor de tal forma que asignas un contador de ventanas abiertas a una variable global:
como por ejemplo (integer gi_ventanas_abiertas):

en el evento open:
gi_ventanas_abiertas ++

en el evento close:
gi_ventanas_abiertas --

Si el uso de un ancestor en común te supone demasiado, entonces tendrás que aumentar y restar el gi_ventanas_abiertas en los eventos de cada ventana que tengas ....

--------------------------------------------------------
No sé si habrá alguna API de windows que no precisa nombre de ventana, pero eso supondría que asumimos que el handle de una ventana sea por ejemplo 1,2 y 3. Luego si eso resultase cierto, al llamar esa API, podriamos comprobar si ha ejecutado bien o no. Lo que pasa es que parece más ariesgado y no estoy seguro si los handles son consecutivos ni si - cuando resultan serlo - lo seguirán siendo en futuras versiones de PB.

saludos,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar