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.

Problema con oParent

Foro público de Xailer en español
Responder
perolero
Mensajes: 135
Registrado: Mar Dic 21, 2010 9:54 am

Problema con oParent

Mensaje por perolero »

Hola:
Estoy desarrollando una aplicación con Xailer 2.3 en el despacho y funciona perfectamente, hoy he instalado el Xailer 2.3 primero en el portatil y luego en un ordenador de casa, importo el proyecto que tengo en el despacho para continuar el trabajo en casa y ahora el uso de oParent
::aCampos := ::oParent:aCol
Do Case
Case ::oParent:oTabla == "ARTICULO"
::oDataSet := ::oArticulo
Case ::oParent:oTabla == "CLIENTE"
::oDataSet := ::oCliente
endcase
me da mensaje de error al ejecutar esto
TBUSCARENTABLAS:FORMINITIALIZE(48)
Warning BASE/1004 Message not found: TFORMPRINCIPAL:ACOL
cuando la llamada no se ha efectuado desde el fomulario principal sino desde un formulario cualquieradel siguiente modo
METHOD BuscarCliente(n) CLASS TFormTpv
Local oFrm
::aCol := {}
aadd(::aCol,{"CodigodeCliente","Código"})
aadd(::aCol,{ "Nombre","Nombre Cliente"})
::oTabla := "CLIENTE"
WITH OBJECT oFrm := TBuscarenTablas(): New(Self)
:cText := "Elija Cliente"
if :ShowModal = mrOk
::oLabel1:cText := subs(::oClave,1,7)
::oLabel2:cText := subs(::oClave,8,40) // ::oClave es el valor que devuelve el codigo de articulo
::AddLinea()
endif
:ShowModal()
END WITH
Pero lo curioso, repito, es que en el despacho no falla y en casa si, usando la misma versión de Xailer y el mismo proyecto, lo único que cambia es que en el despacho tengo Windows 7 y en casa XP.
Gracias.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Problema con oParent

Mensaje por jfgimenez »

Emilio,
> Pero lo curioso, repito, es que en el despacho no falla y
> en casa si, usando la misma versión de Xailer y el mismo
> proyecto, lo único que cambia es que en el despacho tengo
> Windows 7 y en casa XP.
Esa no puede ser la causa. En lo que describes, no hay absolutamente ninguna
diferencia entre XP y W7. Tiene que haber alguna diferencia en el código.
Reví­salo bien.
> WITH OBJECT oFrm := TBuscarenTablas(): New(Self)
> :cText := "Elija Cliente"
> if :ShowModal = mrOk
> <<<<<<<<<<<<<<<<<<<<<<<<
> ::oLabel1:cText := subs(::oClave,1,7)
> ::oLabel2:cText := subs(::oClave,8,40) // ::oClave es
> el valor que devuelve el codigo de articulo
> ::AddLinea()
> endif
> :ShowModal()
> <<<<<<<<<<<<<<<<<<<<<<<<
> END WITH
Aquí­ tienes dos llamadas a ShowModal(), y eso *seguro* que te va a provocar
un error en la segunda llamada (porque ya se ha destruido el formulario), a
no ser que hayas puesto la propiedad lHideOnClose a .T., que lo dudo.
--
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
perolero
Mensajes: 135
Registrado: Mar Dic 21, 2010 9:54 am

Problema con oParent

Mensaje por perolero »

Hola Jose Francisco:
Solucionado ese tema de las dos llamadas, te explico más detalladamente lo que me ocurre y para ello nada más facil que ir al ejemplo DBFData6 donde se modifica la clase FolderPage para poder incrustar un formulario dentro de un folder page. Cojamos por ejemplo el formulario FrmClientes y por ejemplo en el metodo Manteneditar cambiar el New( Application:oMainForm )por New(Self) para que el TFrmCliEdi se abra en el Page Folder y no en el principal ok ?. Pongamos ahora en el Oninitialize del TFrmCliEdi un MsgInfo(::oParent) bien pues en el ordenador de mi despacho donde llevo tiempo realizando las aplicaciones la respuesta de este mensaje es TFrmClientes, mientras que este fin de semana he instalado xailer por primera vez en casa, he usado la versión 2.3, lo he hecho en un portatil con xp, en un pc con xp y en un pc con windows 7 y en todos ellos la respuesta a este mensaje ha sido Tform1 es decir el principal, por intentar buscar diferencias entre mi casa y el despacho donde tengo windows 7 lo único que he encontrado es que en el despacho (que es donde yo creo que funciona correctamente) junto a la carpeta xailer2 el ordenador tiene instalada la carpeta xailer con la versión 1.9.8 ya otra cosa no se me ocurre.
Puedes decirme algo José ?
Gracias.
Emilio Gil.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Problema con oParent

Mensaje por jfgimenez »

Emilio,
> Solucionado ese tema de las dos llamadas, te explico más
> detalladamente lo que me ocurre y para ello nada más facil
> que ir al ejemplo DBFData6 donde se modifica la clase
> FolderPage para poder incrustar un formulario dentro de un
> folder page. Cojamos por ejemplo el formulario FrmClientes y
> por ejemplo en el metodo Manteneditar cambiar el New(
> Application:oMainForm )por New(Self) para que el TFrmCliEdi
> se abra en el Page Folder y no en el principal ok ?.
El padre de un formulario (modal en este caso) no puede ser un control,
tiene que ser otro formulario o Application.
> Pongamos ahora en el Oninitialize del TFrmCliEdi un
> MsgInfo(::oParent) bien pues en el ordenador de mi despacho
> donde llevo tiempo realizando las aplicaciones la respuesta
> de este mensaje es TFrmClientes, mientras que este fin de
> semana he instalado xailer por primera vez en casa, he usado
> la versión 2.3, lo he hecho en un portatil con xp, en un pc
> con xp y en un pc con windows 7 y en todos ellos la
> respuesta a este mensaje ha sido Tform1 es decir el
> principal, por intentar buscar diferencias entre mi casa y
> el despacho donde tengo windows 7 lo único que he
> encontrado es que en el despacho (que es donde yo creo que
> funciona correctamente) junto a la carpeta xailer2 el
> ordenador tiene instalada la carpeta xailer con la versión
> 1.9.8 ya otra cosa no se me ocurre.
En versiones antiguas, si el oParent era un control, Xailer lo aceptaba sin
más, aunque en realidad utilizaba el formulario que contení­a a dicho
control. Pero esto provocaba algún comportamiento extraño en determinadas
circunstancias, y por eso se cambió en la versión 2.1. Ahora, si el oParent
es un control, Xailer busca el formulario de dicho control y sustituye
oParent por el formulario. Seguramente esa es la diferencia que has notado.
--
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
perolero
Mensajes: 135
Registrado: Mar Dic 21, 2010 9:54 am

Problema con oParent

Mensaje por perolero »

Hola José:
Me dices:
El padre de un formulario (modal en este caso) no puede ser un control,
tiene que ser otro formulario o Application.
Debo de entender que como el formulario esta incrustado dentro de un TFolderPage por modificación de esta clase, hay que considerar al mencionado formulario como un control y no como un formulario y que por tanto el oParent no será el FolderPage sino el formulario que contiene a este ?
Saludos,
Emilio Gil.
Responder