In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Ventana Modal

Foro público de Xailer en español
Responder
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

Ventana Modal

Mensaje por jrcsistemas »

Cuando llamo a una ventana con ShowModal dentro de otra que ya era modal me
aparece la ventana del editor de xailer y el programa en ejecucion. Pero no
la ventana que acabo de abrir...!!
Como hago para obligar al cliente a ingresar datos en la ventana.
La secuencia es asi:
En una factura tengo un boton que me abre una ventana modal con los clientes
para buscar el comprador. En esta segunda ventana tiene la opcion de cargar
un cliente nuevo (por eso la quiero modal)
Ahora. Cuando pusa el boton de alta de cliente. Me aparece el editor de
xailer y no la ventana.
No se puede abrir una modal si ya hay otro abierta?
No hay una especie de pila de ventanas modales?
Juan
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Ventana Modal

Mensaje por jfgimenez »

Juan,
> Cuando llamo a una ventana con ShowModal dentro de otra que ya era modal
> me aparece la ventana del editor de xailer y el programa en ejecucion.
> Pero no la ventana que acabo de abrir...!!
Revisa bien el 'oParent' de cada ventana. La primera modal tiene que tener
como 'padre' la ventana principal del programa, pero la segunda modal tiene
que tener como 'padre' la primera modal, y así sucesivamente todas las
modales. Como ves, es importantísimo indicar siempre cual es el padre de una
ventana.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

Ventana Modal

Mensaje por jrcsistemas »

José.
Como le asigno a oParent el objeto ventana padre.
Ej
METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
TFormFacturaClientes
TFormBuscaArticulos():New(Self)
TFormBuscaArticulos():oParent := ::TFormFacturaClientes
TFormBuscaArticulos():ShowModal()
Esto no me funciona
TFORMFACTURACLIENTES:DBFBROWSEFACTURACOLUMN2BTNCLICK(463)
Error BASE/1004 Message not found:
TFORMFACTURACLIENTES:TFORMFACTURACLIENTES
Argumentos: ()
Gracias por tu respuesta.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:491c31e5$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Juan,
>
>> Cuando llamo a una ventana con ShowModal dentro de otra que ya era modal
>> me aparece la ventana del editor de xailer y el programa en ejecucion.
>> Pero no la ventana que acabo de abrir...!!
>
> Revisa bien el 'oParent' de cada ventana. La primera modal tiene que tener
> como 'padre' la ventana principal del programa, pero la segunda modal
> tiene que tener como 'padre' la primera modal, y así sucesivamente todas
> las modales. Como ves, es importantísimo indicar siempre cual es el padre
> de una ventana.
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
> http://www.xailer.info
>
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

Ventana Modal

Mensaje por jrcpoli-quitar »

Saludos:
Prueba así­:
METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
TFormFacturaClientes
TFormBuscaArticulos():New(::oForm):ShowModal()
En TFormBuscaArticulos todas las variables de TFormFacturaClientes seran
::oParent:Nombre del objeto:Value ó Texto
Ej
** Si el Browse contiene registros
IF ::oParent:oDBBCarreras:KeyCount() > 0
*
::oNUMCONC:Value := ::oParent:oDbfCarreras:RACE_ID
::oNUMSUELTA:Value := ::oParent:oDbfCarreras:N_CARRERA
::oFECHAHORA:Value :=
SubStr(::oParent:oDbfCarreras:F_SUELTA,7,2)+"/"+;

SubStr(::oParent:oDbfCarreras:F_SUELTA,5,2)+"/"+;

SubStr(::oParent:oDbfCarreras:F_SUELTA,1,4)+" "+;

SubStr(::oParent:oDbfCarreras:F_SUELTA,9,2)+":"+;

SubStr(::oParent:oDbfCarreras:F_SUELTA,11,2)+":"+;
SubStr(::oParent:oDbfCarreras:F_SUELTA,13,2)
::oLUGAR:Value := ::oParent:oDbfCarreras:POBLACION
*
ENDIF
José Ramón Castro.
Juan Castañeda escribió:
> José.
>
> Como le asigno a oParent el objeto ventana padre.
>
> Ej
>
> METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
> TFormFacturaClientes
> TFormBuscaArticulos():New(Self)
> TFormBuscaArticulos():oParent := ::TFormFacturaClientes
> TFormBuscaArticulos():ShowModal()
>
> Esto no me funciona
>
> TFORMFACTURACLIENTES:DBFBROWSEFACTURACOLUMN2BTNCLICK(463)
> Error BASE/1004 Message not found:
> TFORMFACTURACLIENTES:TFORMFACTURACLIENTES
> Argumentos: ()
>
> Gracias por tu respuesta.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:491c31e5$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>> Juan,
>>
>>> Cuando llamo a una ventana con ShowModal dentro de otra que ya era modal
>>> me aparece la ventana del editor de xailer y el programa en ejecucion.
>>> Pero no la ventana que acabo de abrir...!!
>> Revisa bien el 'oParent' de cada ventana. La primera modal tiene que tener
>> como 'padre' la ventana principal del programa, pero la segunda modal
>> tiene que tener como 'padre' la primera modal, y así­ sucesivamente todas
>> las modales. Como ves, es importantí­simo indicar siempre cual es el padre
>> de una ventana.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>> http://www.xailer.com
>> http://www.xailer.info
>>
>
>
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

Ventana Modal

Mensaje por jrcsistemas »

Gracias tocayo yo me llamo Juan Ramón
O sea que al pasarle el objeto ::oForm puedo acceder a mis controles del
padre y modificarle sus datos? (hasta ahora guardaba mis datos en DATA y las
recuperaba desde el padre)
Si es así me parece muy bien, funciona como las variables private de
clipper?
Tengo tanto por aprender...
Gracias nuevamente.
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escribió
en el mensaje news:4922ae73$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Saludos:
>
> Prueba así:
> METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
> TFormFacturaClientes
> TFormBuscaArticulos():New(::oForm):ShowModal()
>
> En TFormBuscaArticulos todas las variables de TFormFacturaClientes seran
> ::oParent:Nombre del objeto:Value ó Texto
>
> Ej
>
> ** Si el Browse contiene registros
> IF ::oParent:oDBBCarreras:KeyCount() > 0
> *
> ::oNUMCONC:Value := ::oParent:oDbfCarreras:RACE_ID
> ::oNUMSUELTA:Value := ::oParent:oDbfCarreras:N_CARRERA
> ::oFECHAHORA:Value :=
> SubStr(::oParent:oDbfCarreras:F_SUELTA,7,2)+"/"+;
>
> SubStr(::oParent:oDbfCarreras:F_SUELTA,5,2)+"/"+;
>
> SubStr(::oParent:oDbfCarreras:F_SUELTA,1,4)+" "+;
>
> SubStr(::oParent:oDbfCarreras:F_SUELTA,9,2)+":"+;
>
> SubStr(::oParent:oDbfCarreras:F_SUELTA,11,2)+":"+;
> SubStr(::oParent:oDbfCarreras:F_SUELTA,13,2)
> ::oLUGAR:Value := ::oParent:oDbfCarreras:POBLACION
> *
> ENDIF
>
> José Ramón Castro.
>
> Juan Castañeda escribió:
>> José.
>>
>> Como le asigno a oParent el objeto ventana padre.
>>
>> Ej
>>
>> METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
>> TFormFacturaClientes
>> TFormBuscaArticulos():New(Self)
>> TFormBuscaArticulos():oParent := ::TFormFacturaClientes
>> TFormBuscaArticulos():ShowModal()
>>
>> Esto no me funciona
>>
>> TFORMFACTURACLIENTES:DBFBROWSEFACTURACOLUMN2BTNCLICK(463)
>> Error BASE/1004 Message not found:
>> TFORMFACTURACLIENTES:TFORMFACTURACLIENTES
>> Argumentos: ()
>>
>> Gracias por tu respuesta.
>>
>>
>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
>> news:491c31e5$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>>> Juan,
>>>
>>>> Cuando llamo a una ventana con ShowModal dentro de otra que ya era
>>>> modal me aparece la ventana del editor de xailer y el programa en
>>>> ejecucion. Pero no la ventana que acabo de abrir...!!
>>> Revisa bien el 'oParent' de cada ventana. La primera modal tiene que
>>> tener como 'padre' la ventana principal del programa, pero la segunda
>>> modal tiene que tener como 'padre' la primera modal, y así sucesivamente
>>> todas las modales. Como ves, es importantísimo indicar siempre cual es
>>> el padre de una ventana.
>>>
>>> --
>>> Un saludo,
>>>
>>> José F. Giménez
>>> http://www.xailer.com
>>> http://www.xailer.info
>>>
>>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Ventana Modal

Mensaje por jfgimenez »

Juan,
> TFormBuscaArticulos():New(Self)
Cuando haces esto, ya estás asignando su 'oParent', que es Self. Y Self no
es ni más ni menos que el objeto desde donde estás llamando a
TFormBuscaArticulos():New(), es decir, el formulario actual.
Dicho de otra forma, vamos a suponer dos clases de formulario, TForm1 y
TForm2. Si en uno de los métodos de TForm1 ponemos:
TForm2():New( Self )
lo que estamos haciendo es crear una instancia de TForm2 y diciendole que su
'oParent' es Self, es decir el objeto que ya existe de TForm1. A partir de
aquí, si quieres hacer referencia desde TForm2 a cualquier componente,
propiedad o método de TForm1, sólo tienes que usar su ::oParent. P.ej.:
::oParent:cText // Titulo de TForm1
::cText // Titulo de TForm2
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

Ventana Modal

Mensaje por jrcpoli-quitar »

Saludos:
Como dice José F. Gimenez no me explico bien o no me has entendido
totalmente, veamos en el ejemplo que te he mandado, accedo a los datos
del padre a trevés de la ::oParent, incluso compruebo que el Browse
contiene datos, y si los contiene le paso los datos al hijo, pero como
el hijo es modal no me permitirá pasarle datos al padre, a no ser que el
hijo se cierre y si se cierra pierdo los datos, a no ser que al hijo le
active la propiedad lHideOnClose, que permite leer los datos del hijo
aún estando cerrado, pero cuidado que está cerrado no destruido, por lo
tanto tienes que ser tú el que una vez obtenidos los datos lo destruyas,
si no lo haces iras dejando formularios abiertos que ocupan memoria.
Ej.
Lo hago al vuelo. por lo tanto puede tener errores.
METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
TFormFacturaClientes
WIHT OBJECT TFormBuscaArticulos():New(::oForm)
:lHideOnClose := .T.
// Puedo pasarle el valor al hijo, el valor de la columna2 antes
// de abrirlo
:oArticulo:Value := Value
:ShowModal()
// cierro el hijo pero con datos
IF :nModalResult == mrOK
// Obtener los valores del hijo y pasarlos al padre
// Usando oSender := columna2 del Browse donde estoy // posicionado
oSender:Value := :oArticulo:Value
// Usando el Browse
::oBrowse:variablecolumna:Value := :oArticulo:Value
// O tambien sobre la base de datos del Browse
::oBaseDatos:Campo := :oArticulo:Value
// O como lo hací­as con datas sin la propiedad
// lHideOnClose a TRUE
::oBaseDatos:Campo := :DATA
// Refrescar el Browse
::DbfBrowseFactura:RefreshCurrent()
ENDIF
// Cierro y destruyo el hijo siempre lo hago tenga o no
// la propiedad lHideOnClose activada.
:End()
END
Fijate en los "::" cuando son datos del padre y ":" cuando son del
objeto llamado que es el hijo.
Espero que ahora me haya explicado mejor, y no haberme equivocado y
además te sirva de ayuda.
El ejemplo mandado en mi correo anterior también es valido, pero para
pasar datos entre padre y hijo, o comprobar datos del padre desde el hijo.
Veamos un ejemplo del uso de tres formularios, en una aplicación en la
que se quiere que el usuario no acceda a los datos del segundo
formulario, sin rellenar los datos del primero, y al tercero sin
rellenar los datos del segundo asociación padre-hijo-nieto, todas las
bases de datos estan en el padre, pero quiero utilizarlas en el nieto
que es el tercero pues aun así­ puedo acceder a ellas si hago bien las
asociaciones de los formulario al padre lo asocio con la ventana
principal donde se ejecuta New(Application:oMainForm), el segundo que es
llamado desde el padre New(::oForm) y el tercero que es llamado desde el
segundo New(::oForm), pues bien desde el tercero podré acceder a las
bases de datos del primero así­: ::oParent:oParent:oDataBase.
José Ramón Castro.
Juan Castañeda escribió:
> Gracias tocayo yo me llamo Juan Ramón
>
> O sea que al pasarle el objeto ::oForm puedo acceder a mis controles del
> padre y modificarle sus datos? (hasta ahora guardaba mis datos en DATA y las
> recuperaba desde el padre)
>
> Si es así­ me parece muy bien, funciona como las variables private de
> clipper?
>
> Tengo tanto por aprender...
>
> Gracias nuevamente.
>
> "José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escribió
> en el mensaje news:4922ae73$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>> Saludos:
>>
>> Prueba así­:
>> METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
>> TFormFacturaClientes
>> TFormBuscaArticulos():New(::oForm):ShowModal()
>>
>> En TFormBuscaArticulos todas las variables de TFormFacturaClientes seran
>> ::oParent:Nombre del objeto:Value ó Texto
>>
>> Ej
>>
>> ** Si el Browse contiene registros
>> IF ::oParent:oDBBCarreras:KeyCount() > 0
>> *
>> ::oNUMCONC:Value := ::oParent:oDbfCarreras:RACE_ID
>> ::oNUMSUELTA:Value := ::oParent:oDbfCarreras:N_CARRERA
>> ::oFECHAHORA:Value :=
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,7,2)+"/"+;
>>
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,5,2)+"/"+;
>>
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,1,4)+" "+;
>>
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,9,2)+":"+;
>>
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,11,2)+":"+;
>> SubStr(::oParent:oDbfCarreras:F_SUELTA,13,2)
>> ::oLUGAR:Value := ::oParent:oDbfCarreras:POBLACION
>> *
>> ENDIF
>>
>> José Ramón Castro.
>>
>> Juan Castañeda escribió:
>>> José.
>>>
>>> Como le asigno a oParent el objeto ventana padre.
>>>
>>> Ej
>>>
>>> METHOD DbfBrowseFacturaColumn2BtnClick( oSender, Value ) CLASS
>>> TFormFacturaClientes
>>> TFormBuscaArticulos():New(Self)
>>> TFormBuscaArticulos():oParent := ::TFormFacturaClientes
>>> TFormBuscaArticulos():ShowModal()
>>>
>>> Esto no me funciona
>>>
>>> TFORMFACTURACLIENTES:DBFBROWSEFACTURACOLUMN2BTNCLICK(463)
>>> Error BASE/1004 Message not found:
>>> TFORMFACTURACLIENTES:TFORMFACTURACLIENTES
>>> Argumentos: ()
>>>
>>> Gracias por tu respuesta.
>>>
>>>
>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
>>> news:491c31e5$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
>>>> Juan,
>>>>
>>>>> Cuando llamo a una ventana con ShowModal dentro de otra que ya era
>>>>> modal me aparece la ventana del editor de xailer y el programa en
>>>>> ejecucion. Pero no la ventana que acabo de abrir...!!
>>>> Revisa bien el 'oParent' de cada ventana. La primera modal tiene que
>>>> tener como 'padre' la ventana principal del programa, pero la segunda
>>>> modal tiene que tener como 'padre' la primera modal, y así­ sucesivamente
>>>> todas las modales. Como ves, es importantí­simo indicar siempre cual es
>>>> el padre de una ventana.
>>>>
>>>> --
>>>> Un saludo,
>>>>
>>>> José F. Giménez
>>>> http://www.xailer.com
>>>> http://www.xailer.info
>>>>
>
jrcsistemas
Mensajes: 180
Registrado: Lun Sep 15, 2008 2:53 pm

Ventana Modal

Mensaje por jrcsistemas »

Muchas gracias a los dos por sus esmeradas respuestas.
Algunas veces es dificil explicarse en pocas palabras y con "mensajitos", no
hay como una charla mano a mano, pero eso igual nos llevaria varias horas...
Tal vez con un simple ejemplo chiquito en la ayuda de cada uno de los
controles nos serviría mucho, pero bueno, se que eso es cuestion de tiempo,
y tal vez cuando aprenda muuuuucho mas pueda aportar para que entre todos
hagamos un manual con mas ejemplos.
Gracias nuevamene
Juan
Responder