Saber si ventana MDI esta abierta - ( SOLUCIONADO )
- leandro
- Posts: 1744
- Joined: Wed Oct 26, 2005 2:49 pm
- Location: Colombia
- Has thanked: 34 times
- Been thanked: 10 times
- Contact:
Saber si ventana MDI esta abierta - ( SOLUCIONADO )
Buenos días para todos...
Requiero saber si una ventana MDI se encuentra abierta, desconozco si se puede hacer mediante el nombre del objeto? o debe ser con título? y si esta abierta indicarle que tome el foco.
de antemano gracias.
Requiero saber si una ventana MDI se encuentra abierta, desconozco si se puede hacer mediante el nombre del objeto? o debe ser con título? y si esta abierta indicarle que tome el foco.
de antemano gracias.
Last edited by leandro on Tue Nov 12, 2019 4:22 pm, edited 1 time in total.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
Re: Saber si ventana MDI esta abierta
if !VerificaWindows()
return
endif
if ! lChild
DEFINE WINDOW s_oWndPDF TITLE cTitulo
else
DEFINE WINDOW s_oWndPDF MDICHILD of M->oWnd vscroll TITLE cTitulo
endif
if lChild
s_oWndPDF:bValid := {|| HB_GCAll(.t.), s_oWndPDF := Nil , .t. }
else
s_oWndPDF:bPostEnd := {|| HB_GCAll(.t.), s_oWndPDF := Nil }
endif
ACTIVATE WINDOW s_oWndPDF MAXIMIZED
/*****************************************************************************/
static function VerificaWindows()
/*
*/
if s_oWndPDF!= nil
if !IsZoomed(s_oWndPDF:hWnd)
s_oWndPDF:Maximize()
endif
return(.f.)
endif
return(.t.)
return
endif
if ! lChild
DEFINE WINDOW s_oWndPDF TITLE cTitulo
else
DEFINE WINDOW s_oWndPDF MDICHILD of M->oWnd vscroll TITLE cTitulo
endif
if lChild
s_oWndPDF:bValid := {|| HB_GCAll(.t.), s_oWndPDF := Nil , .t. }
else
s_oWndPDF:bPostEnd := {|| HB_GCAll(.t.), s_oWndPDF := Nil }
endif
ACTIVATE WINDOW s_oWndPDF MAXIMIZED
/*****************************************************************************/
static function VerificaWindows()
/*
*/
if s_oWndPDF!= nil
if !IsZoomed(s_oWndPDF:hWnd)
s_oWndPDF:Maximize()
endif
return(.f.)
endif
return(.t.)
- leandro
- Posts: 1744
- Joined: Wed Oct 26, 2005 2:49 pm
- Location: Colombia
- Has thanked: 34 times
- Been thanked: 10 times
- Contact:
Re: Saber si ventana MDI esta abierta
Amigo gracias por responder....
Pero no logro hacer que ande, buscando las propiedades de la oWnd Principal, me encontré con este array, pero no logro sacar la información de ahí. No encuentro dentro del objeto los nombres de las variables de los objetos TMDICLIENT... de antemano gracias.
Pero no logro hacer que ande, buscando las propiedades de la oWnd Principal, me encontré con este array, pero no logro sacar la información de ahí. No encuentro dentro del objeto los nombres de las variables de los objetos TMDICLIENT... de antemano gracias.
Code: Select all | Expand
xbrowse(oWnd:oWndclient:aWnd)
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
- karinha
- Posts: 7935
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Saber si ventana MDI esta abierta
Code: Select all | Expand
STATIC lWinOpen := .T.
FUNCTION Main()
...
RETURN NIL
STATIC lWinOpen := .F.
FUNCTION CHAMADO( oWnd, oContato )
IF lWinOpen = .F.
lWinOpen := .T.
ELSE
? [No puede... ]
lLigaBtnChama := .F.
oContato:Disable()
oContato:Refresh()
lWinOpen := .F.
RETURN NIL
ENDIF
RETURN NIL
Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Re: Saber si ventana MDI esta abierta
Tienes que buscar el hWnd de la ventana que quieres comprobar
Code: Select all | Expand
Function IsOpen( oWndMdi )
local nAt
local oWnd
if ( nAt := AScan( ::aWnd, { | oW | oW:hWnd == oWndMdi:hWnd } ) ) != 0
oWnd = oWndMdi:aWnd[ nAt ]
endif
Return oWnd
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- cmsoft
- Posts: 1297
- Joined: Wed Nov 16, 2005 9:14 pm
- Location: Mercedes - Bs As. Argentina
- Been thanked: 2 times
Re: Saber si ventana MDI esta abierta
Hola Leadron:
Yo llevo un control de las ventanas (o funciones mejor dicho) que tengo abiertas al llamar a la funcion que las abrira.
Se que no es exactamente lo mismo que estas preguntando pero te puede dar una idea.
oApp:aVentanas es un array que al iniciar se define vacio (oApp:aVentanas := {})
Cuando abro el procedimiento o la funcion hago
Al cerrar el procedimiento llamo a esta funcion
Rustico pero funciona, tal vez pueda darte una pista
Yo llevo un control de las ventanas (o funciones mejor dicho) que tengo abiertas al llamar a la funcion que las abrira.
Se que no es exactamente lo mismo que estas preguntando pero te puede dar una idea.
oApp:aVentanas es un array que al iniciar se define vacio (oApp:aVentanas := {})
Cuando abro el procedimiento o la funcion hago
Code: Select all | Expand
PROCEDURE Artic()
LOCAL hHand, ....
cVentana := PROCNAME()
IF ASCAN(oApp:aVentanas,cVentana) > 0 // Si ya esta abierta, la selecciono y la restauro
hHand := ASCAN(oApp:aVentanas,cVentana)
oApp:oWnd:Select(hHand)
oApp:oWnd:oWndClient:aWnd[hHand]:Restore()
RETURN
ENDIF
AADD(oApp:aVentanas,cVentana) // Sino la guardo en la tabla de ventanas abiertas.
Al cerrar el procedimiento llamo a esta funcion
Code: Select all | Expand
STATIC FUNCTION cerrar ( )
LOCAL aNueva := {}, i, j
j := ASCAN(oApp:aVentanas,cVentana)
FOR i := 1 TO LEN(oApp:aVentanas)
IF i <> j
AADD(aNueva,oApp:aVentanas[i])
ENDIF
NEXT i
oApp:aVentanas := ACLONE(aNueva)
RETURN .t.
Rustico pero funciona, tal vez pueda darte una pista
- leandro
- Posts: 1744
- Joined: Wed Oct 26, 2005 2:49 pm
- Location: Colombia
- Has thanked: 34 times
- Been thanked: 10 times
- Contact:
Re: Saber si ventana MDI esta abierta
Gracias a todos por las ideas...
Cristobal,
Intente buscar en el array que contiene la información de las ventanas hijas que están abiertas, pero siempre me retorna 0.
Lo raro es que la información si esta contenida dentro de ese array
![Image](http://hymplus.com/forofw/contenidoarray.png)
Cesar, gracias por la idea, pero en este momento lo tengo aun mas rustico, cambiando el valor de una variable PUBLIC a .T., así como lo tiene nuestro colega brasileño karinha. Pero la idea es tomar la información de las datas de la clase.
De antemano gracias.
Cristobal,
Intente buscar en el array que contiene la información de las ventanas hijas que están abiertas, pero siempre me retorna 0.
Code: Select all | Expand
********************************************
*BUSCA SI VENTANA ESTA ABIERTA POR EL TITULO
********************************************
Function IsOpen( )
Local nAt
Local aVentanas := oWnd:oWndclient:aWnd //oWnd ventana principal de la aplicación
nAt := AScan(aVentanas,"Clientes")
Return nAt
Lo raro es que la información si esta contenida dentro de ese array
![Image](http://hymplus.com/forofw/contenidoarray.png)
Cesar, gracias por la idea, pero en este momento lo tengo aun mas rustico, cambiando el valor de una variable PUBLIC a .T., así como lo tiene nuestro colega brasileño karinha. Pero la idea es tomar la información de las datas de la clase.
De antemano gracias.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
Re: Saber si ventana MDI esta abierta
Leandro no puedes buscar el titulo de la ventana, porque lo que se guarda en aWnds es el identificador de cada ventana ( hWnd ), fíjate en mi ejemplo y podrás conseguirlo
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
-
- Posts: 178
- Joined: Wed Jan 02, 2019 8:36 am
Re: Saber si ventana MDI esta abierta
Buenos días Leandro.
Yo lo hago de la siguiente manera (y si es con el nombre de la ventana, creo)
Quizá no sea muy ortodoxo, pero me funciona a las mil maravillas.
1) Tengo una venta MDI Principal. Denominada oWndP. (nota: oWndP, la tengo declarada como MEMVAR al principio del primer módulo, para que sea visible en toda la apliación.)
2) Añado los botones, opciones del menú, etc... y en el ACTION le pongo lo siguiente
ACTION IF( Activa_MDI("Proveedores"), ,Prove() )
3) la function Activa_MDI(cTitle)
Busca si existe una ventana MDI hija con ese nombre, en este caso "Proveedores". Si existe le pasa el foco. En caso contrario se ejecuta el tercer parámetro del IF() que es ejecutar la función y obviamente crear una venta MDI hija, donde le pondremos ese titulo.
nota : obviamente al crear la nueva MDI, le tienes que indicar un nombre. Ojo también con el SET EXACT ON/OFF
Te copio la función tal y como yo la tengo. Si necesitas mas ayuda (y si te puedo ayudar), te monto un ejemplo totalmente funcional.
******************************************************************************
FUNCTION Activa_MDI(cTitle) // Esta funcion selecionada una ventana MDI si ya esta abierta.
LOCAL i:=0, lSuccess:=.f.
cTitle:=upper(cTitle)
FOR i=1 TO LEN(oWndP:oWndClient:aWnd)
IF UPPER( oWndP:oWndClient:aWnd[i]:cCaption )=cTitle
oWndP:oWndClient:aWnd[i]:SetFocus()
lSuccess:=.t.
ENDIF
NEXT
RETURN lSuccess
Return NIL
Yo lo hago de la siguiente manera (y si es con el nombre de la ventana, creo)
Quizá no sea muy ortodoxo, pero me funciona a las mil maravillas.
1) Tengo una venta MDI Principal. Denominada oWndP. (nota: oWndP, la tengo declarada como MEMVAR al principio del primer módulo, para que sea visible en toda la apliación.)
2) Añado los botones, opciones del menú, etc... y en el ACTION le pongo lo siguiente
ACTION IF( Activa_MDI("Proveedores"), ,Prove() )
3) la function Activa_MDI(cTitle)
Busca si existe una ventana MDI hija con ese nombre, en este caso "Proveedores". Si existe le pasa el foco. En caso contrario se ejecuta el tercer parámetro del IF() que es ejecutar la función y obviamente crear una venta MDI hija, donde le pondremos ese titulo.
nota : obviamente al crear la nueva MDI, le tienes que indicar un nombre. Ojo también con el SET EXACT ON/OFF
Te copio la función tal y como yo la tengo. Si necesitas mas ayuda (y si te puedo ayudar), te monto un ejemplo totalmente funcional.
******************************************************************************
FUNCTION Activa_MDI(cTitle) // Esta funcion selecionada una ventana MDI si ya esta abierta.
LOCAL i:=0, lSuccess:=.f.
cTitle:=upper(cTitle)
FOR i=1 TO LEN(oWndP:oWndClient:aWnd)
IF UPPER( oWndP:oWndClient:aWnd[i]:cCaption )=cTitle
oWndP:oWndClient:aWnd[i]:SetFocus()
lSuccess:=.t.
ENDIF
NEXT
RETURN lSuccess
Return NIL
Jesús Marín
deumare@gmail.com
Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
deumare@gmail.com
Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
- leandro
- Posts: 1744
- Joined: Wed Oct 26, 2005 2:49 pm
- Location: Colombia
- Has thanked: 34 times
- Been thanked: 10 times
- Contact:
Re: Saber si ventana MDI esta abierta
Jesus gracias por la información, lo solucione con tu aporte.
Cristobal, también gracias por ejemplo, pero para este caso, me parece mas conveniente buscar por el titulo de la ventana, que por el nombre del objeto.
Cristobal, también gracias por ejemplo, pero para este caso, me parece mas conveniente buscar por el titulo de la ventana, que por el nombre del objeto.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]