28 de septiembre de 2016

Una forma de localizar un form y ponerlo en primer plano mediante código

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