Container con propiedad Modal

401 views
Skip to first unread message

PabloZa

unread,
Sep 12, 2015, 10:13:49 AM9/12/15
to Comunidad de Visual Foxpro en Español
Hola a todos.
Existe alguna propiedad tipo ShowWindow Modal=.T. para los controles Container?
Saludos

JTempo

unread,
Sep 12, 2015, 10:20:16 AM9/12/15
to Comunidad de Visual Foxpro en Español
Y jugando con el LostFocus?

Fidel Charny

unread,
Sep 12, 2015, 10:27:45 AM9/12/15
to Comunidad de Visual Foxpro en Español
No.  Modal=.t. no existe ni en los Form y showWindow no tiene que ver con Modal / Modeless. Formulario modal  WndowType=1
Pero, cuál es la idea?


El sábado, 12 de septiembre de 2015, 11:13:49 (UTC-3), PabloZa escribió:

Martin Paredes

unread,
Sep 12, 2015, 10:30:13 AM9/12/15
to Comunidad de Visual Foxpro en Español
como te comenta el compañero JTEMPO prueba con esto :

evento lostfocus del container :

IF THIS.ENABLED=.T. THEN

   THIS.objeto.SetFocus()

ENDIF

Ricardo Pina

unread,
Sep 12, 2015, 10:35:51 AM9/12/15
to Grupo VFP
Tomar un objeto como modal no es solo que no pierda el foco, también tendría que continuar el evento desde donde esté invocado.
Me sumo a la pregunta de Fidel
Cual es la idea o la necesidad?

Saludos
--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Pablo Zanini

unread,
Sep 12, 2015, 11:00:07 AM9/12/15
to publice...@googlegroups.com

La idea es que cuando tenga el Foco en el container no se pueda tocar ningún otro control del formulario fuera del container

Fidel Charny

unread,
Sep 12, 2015, 11:42:58 AM9/12/15
to Comunidad de Visual Foxpro en Español
Un poco primitivo, pero más o menos.

Creas un método en el form, digamos "get_enabled"
LPARAMETERS loObjExcep , tlEnabled
LOCAL oControl
,i,lcExclude

IF NOT PEMSTATUS
(thisform,"aEnabled",5)
    ADDPROPERTY
(thisform,"aEnabled[1,2]",null)
    ADDPROPERTY
(thisform,"nEnabled",0)
ENDIF
this.closable = tlEnabled
lcExclude
= loObjExcep.name
IF NOT tlEnabled
    FOR EACH ocontrol IN
this.Controls
        IF ocontrol
.name # lcExclude
            WITH
this
               
.nEnabled = .nEnabled + 1
                DIMENSION
.aEnabled(.nEnabled,2)
               
.aEnabled[.nEnabled,1]=oControl
               
.aEnabled[.nEnabled,2]=oControl.Enabled
               
            ENDWITH
            oControl
.enabled = .f.
        ENDIF
    ENDFOR
ELSE
    FOR i
= 1 TO ALEN(this.aEnabled,1)
        IF
!ISNULL(this.aEnabled[i,1])
           
this.aEnabled[i,1].Enabled = this.aEnabled[i,2]
        ENDIF
    NEXT
ENDIF


Luego necesitas:
En el gotfocus del primer elemento que toma el foco (puede estar en todos)
thisform.get_Enabled(this.parent , .f.)

En el container, tendrás que tener un commandgroup con aceptar/ Cancelar para reactivar el form.
En el click de cada uno de esos botones va:
thisform.Get_enabled(this.parent.parent, .t.)

Utilizar el gotfocus y lostfocus del container puede no funcionar como se espera.

Ricardo Pina

unread,
Sep 12, 2015, 12:56:56 PM9/12/15
to Grupo VFP
Otra idea sencilla y no demasiado académica sería cubrir el formulario con un shape transparente o no según gustos. :-)

Pero no comentaste el porqué de esta necesidad ?

Víctor Hugo Espínola Domínguez

unread,
Sep 12, 2015, 1:32:39 PM9/12/15
to publice...@googlegroups.com
Hola Pablo

Puedes usar una propiedad booleana del form a la que le asignas .T. cuando se cumpla la condición de que no pueda abandonar el container y en el LostFocus del container le asignas .F.

Para esta propiedad creas el método lPropiedad_Assign:
Lparameters vNewVal
*To do: Modify this routine for the Assign method
This.lPropiedad = m.vNewVal

If This.lPropiedad
  This.HabilitarControles(.F.)
Endif

En el método HabilitarControles
Lparameters tlHabilitar

If m.tlHabilitar
    *-- Habilitar los demás controles
Else
    *-- Deshabilitar los demás controles
Endif


Saludos,
Víctor.
Lambaré - Paraguay.

Carlos Miguel FARIAS

unread,
Sep 12, 2015, 6:36:54 PM9/12/15
to Grupo Fox
Lo que dice Ricardo Pina lo he usado en formularios para activar por ejemplo un contenedor para hacer búsquedas.
Por ejemplo, en un Form de carga (ABM) tengo una función de búsqueda disponible (con filtros y demás), entonces, cuando el usuario pide una búsqueda, hago visible un contenedor transparente, que está en una capa por encima de todo el resto del formulario y sobre este, hago visible un contenedor, con todos los campos que se deben completar para una búsqueda en particular.
De esa manera, el contenedor transparente, hace inaccesibles los controles del formulario (están tras el "vidrio"), sin tener que tocar sus atributos de enabled/disabled, y el contenedor de búsqueda, esta sobre el "vidrio", cuando el usuario "disparara" la búsqueda, si es exitosa, oculto el container transparente y el de búsqueda, y en caso contrario, mando mensaje apropiado.
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe, sobre todo si falla la UPS

Pablo Zanini

unread,
Sep 14, 2015, 7:10:20 AM9/14/15
to publice...@googlegroups.com

Si. De hecho lo tengo así, con un shape transparente que cubre todos los controles al momento de hacer visible el Container. Mi consulta era si existía alguna propiedad del container que hiciera mas claro el diseño del formulario.

Antonio Meza

unread,
Sep 14, 2015, 11:41:55 AM9/14/15
to Comunidad de Visual Foxpro en Español
Solo les queda inventar el Hilo Prieto jajajaja

Tan sencillo como crear otro formulario modal y listo, como dice la canción de Juan Gabriel "Pero que necesidad, para que tanto problema la la la"

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages