He trabajado usando WINDOWS MDICHILD sin problemas. Pero ahora, en un nuevo proyecto, se hace necesario trabajar con DIALOG NOWAIT, siempre en ambiente MDI.
Utilizo DBFs temporales para ciertas consultas, las que creo en una carpeta en C:\. Ahora bien, con Window MdiChild funciona bien la eliminación de estas temporales, sea ya que el usuario cerró la winchild directamente, o la tenia minimizada y cerró el programa. Este comportamiento no es el mismo con Dialogs NOWAIT: si el usuario cierra el dialog, se borra la temporal, pero si no tiene el cuidado de cerrarlo y cierra el programa, las temporales se quedan colgadas. Es decir, si se cierra el programa y habian dialogs abiertos, no se evalúa la cláusula VALID del dialog.
Entonces, mi pregunta es: ¿Cómo hacer para que se ejecute el VALID en los dialogs NOWAIT al cerrar el programa, a como lo hacen las MDICHILDS, y poder borrar las temporales?
Aqui pongo un trozo de codigo de como lo estoy haciendo.
Agradezco, de antemano, cualquier sugerencia o ayuda.
- Code: Select all Expand view RUN
- Static oWnd
//----------------------------
Function Main()
DEFINE WINDOW oWnd MDI TITLE "MyTitle"
DEFINE BUTTONBAR oBar OF oWnd SIZE 60, 64
DEFINE BUTTON PROMPT "Créditos" OF oBar ACTION Creditos()
...
ACTIVATE WINDOW oWnd MAXIMIZED ;
VALID MsgNoYes("¿En realidad desea salir?","Salir")
Return nil
//----------------------------
Function Creditos()
local oDlg, cSitPTMO:="SITUAC"
LOCAL cDrivDirTemp := "C:\TEMPORALES\"
DbUseArea(.t.,, "Creditos","Creditos",.t.)
copy struct to cDrivDirTemp+(cSitPTMO)
dbUseArea(.t.,,cDrivDirTemp+(cSitPTMO),(cSitPTMO), .F.)
DEFINE DIALOG oDlg OF oWnd RESOURCE "CREDITOSCONSUL"
ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
VALID( (cSitPTMO)->(dbCloseArea()) ,;
Ferase(cDrivDirTemp+(cSitPTMO)+".dbf") ,;
dbSelectArea(cOldSele), .T. )
Return nil
Saludos.