Page 1 of 1

Ventanas MDI

Posted: Sun May 07, 2006 2:54 am
by Armando
Amigos del foro:

En una aplicación donde uso ventanas MDI cuyo código muestro a continuación:

DEFINE WINDOW oWnd MDICHILD OF oWindow FROM 0,0 TO 30,54
oWnd:bGotFocus = { || oDlg:SetFocus() }
DEFINE DIALOG oDlg RESOURCE "BrwFac" OF oWnd FONT oFont

ACTIVATE DIALOG oDlg NOWAIT ON INIT oDlg:MOVE(0,0) VALID ! GetASyncKey(VK_ESCAPE)

ACTIVATE WINDOW oWnd ON INIT (oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29));
ON RESIZE (oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29));
MAXIMIZED VALID (oWnd:=NIL,Cierra(oFac,oDlg))


Se me presenta un caso muy curioso, tal como esta el código cuando abro dos o mas ventanas y despues cierro una de ellas me tira el error

ERROR OBJECTS/8 NO OBJECTS MSG UNDEFINED SETSIZE

El error apunta a la línea donde esta la clausula MXIMIZED

Obviamente si quito la clausula MAXIMIZED el error no se presenta sin embargo necesito que al abrir la ventana esta se maximize.

Alguien que me indique como abrir las ventanas MDI correctamente ?

Saludos a todos

Posted: Mon May 08, 2006 5:15 pm
by karinha
Necesitas CERRAR las FONTS al Salir.

Posted: Mon May 08, 2006 6:59 pm
by Armando
Joao:

Te agradezco el interes, las FONT se estan cerrando en la funcion Cierra()

STATIC FUNCTION Cierra()
oFont1:END()
oFont2:END()
oIcono:END()
FOR nVez := 1 TO LEN(aAlias)
(aAlias[nVez])->(DBCLOSEAREA())
NEXT
RETURN (.T.)

Pero aún asi tira el error.

Saludos, Armando

Posted: Mon May 08, 2006 9:13 pm
by karinha
Intente en el MENU PRINCIPAL en el Inicio:

#Include "Objects.Ch"

Posted: Mon May 08, 2006 10:29 pm
by fgondi
Hola Armando

El problema viene de la clausula ON RESIZE. En ella llamas al evento oWnd:SetSize.

Cuando cierras una ventana, se llama en algun momento a Resize. No se donde se llama ni porque se llama, creo que debería estar controlado esa ejecución para que no se produjera.

De todas formas prueba a incluir la validación de si oWnd<>NIL para saber si tienes que ejecutar oWnd:SetSize:

Code: Select all

ACTIVATE WINDOW oWnd ON INIT (oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29)); 
ON RESIZE ( if( oWnd<>NIL, oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29), )); 
MAXIMIZED VALID (oWnd:=NIL,Cierra(oFac,oDlg)) 

Posted: Tue May 09, 2006 12:34 am
by Armando
João y Fernando:

Habia yo brincado el problema sacando la claúsula MAXIMIZED
pero con el IF que sugirió FGondi el problema se ha solucionado
definitivamente aún si abro la ventana MAXIMIZADA.

Muchas gracias a ambos por su tiempo y sapiencia.

Saludos, Armando