He averiguado una forma bastante interesante que me permite localizar un form abierto y ponerlo en primer lugar. Tengo una aplicación que ya es bastante grande y no quería usar el consabido 'DO FORM xxxx NAME xVar LINKED' pues no quiero ocupar más espacio en memoria de lo necesario.
VFP tiene en el objeto '_Screen' una matriz que hace referencia a cada uno de los forms abiertos, te tal forma que se puede acceder a dicha matriz. Basándome en esto escribí el siguiente código:
LOCAL lix,lcObjeto,lcTextp lix = 0 lcObjeto = "Objeto" DO WHILE !EMPTY(lcObjeto) lix = lix +1 lcObjeto = "_screen.forms(" + ALLTRIM(STR(lix)) + ")" IF TYPE(lcObjeto) = "O" lcTextp = &lcObjeto..CAPTION IF lcTextp = "Archivo de facturas de compras" &lcObjeto..ALWAYSONTOP = .T. &lcObjeto..ALWAYSONTOP = .F. &lcObjeto..ACTIVATE &lcObjeto..pagfrm1.page1.SETFOCUS ENDIF ELSE lcObjeto = "" ENDIF ENDDO
La variable lcObjeto es la que nos va dar acceso al formulario, inicialmente le pongo cualquier valor para que se ejecute el 'DO WHILE ...'. Con cada pasada el 'DO WHILE ...', le incremento la variable 'lix' que es la que nos sirve para indicar cual es el formulario deseado. Pasamos a la variable 'lcTextp' el Caption de cada Form de la matriz y cuando localizamos el que queremos, directamente le cambiamos la propiedad AlwaysOnTop = .T., de esta forma pasa a primer plano, y luego lo ponemos a su valor verdadero. De todas formas por si acaso en el evento 'Activate' del Form tambien tengo puesto el AlwaysOnTop = .F. por si acaso.
Espero que se sirva a alguien, creo que como idea no está mal.
Saludos
Rafael Ramírez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.