
Localizar un form y ponerlo en primer plano
Publicado por Ernesto Hernandez (4623 intervenciones) el 19/06/2007 22:58:19
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.
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.
Valora esta pregunta


0