FoxPro/Visual FoxPro - Manejo de una Clase FORM

 
Vista:

Manejo de una Clase FORM

Publicado por miguel (9 intervenciones) el 27/05/2011 00:25:45
Hola tengo una duda sobre como manejarme con una clase form que necesito crear. El form serviria para buscar clientes por distintos criterios en una determinada tabla, todo eso lo se hacer, mi duda surge a la hora de devolver el valor seleccionado, la idea es que dicho form me sirva para llamarlo desde distintos lugares, o sea, distintos form y tambien poder invocarlo desde una clase pageframe que cree.
el pageframe me serviria para tener mis distintos vendedores, cada uno puede invocar el form de busqueda, una ves seleccionado un cliente al "cerrar" dicho form quisiera que el "vendedor" que lo busco sepa dicho resultado.
ya logre que cada pagina del pageframe abra un form individual el cual no interferiria con los demas utilizando la funcion activepage, el unico problema es que no se como al cerrar mi form de busqueda dicho resultado sea dado al page (vendedor) correspondiente.
Espero haberme expresado correctamente y puedas guiarme, creo que solo tengo que saber que eventos son los adecuados, desde ya muchisimas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Manejo de una Clase FORM

Publicado por xx (378 intervenciones) el 27/05/2011 02:34:16
Te paso ideas, podrias crear una clase FORM alojada en un VCX que instanciarias en tu formulario por ejemplo de facturacion en el evento init en modo inactivo e invisible que servira para buscar un cliente esta clase podria contener un optiongroup que serviria para indicar si buscarias un codigo o nombre o RUC/DOCUMENTO acto seguido ingresarias la clave a buscar en un text en el que una vez que se ingrese la clave y al presionar ENTER te mostraria los registros concidentes en una grilla acto seguido podrias seleccionar uno de esos registros con ENTER enviaria los datos del registro a un metodo alojado en el formulario principal para que lo procese y valide una vez validado el registro el foco vuelve al FORM alojado en el VCX y este se desactiva para asi volver al formulario principal que es el de FACTURACION

Ojala se entienda!!
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Manejo de una Clase FORM

Publicado por Juan Manuel Cruz (512 intervenciones) el 27/05/2011 11:24:43
La solución pasa por invocar a tu form de búsqueda pasandole parámetros, haciéndolo modal y que al cerrarse devuelva una variable que puede ser un objeto o un array con el vaciado SCATTER del registro de cliente que haya elegido.

Así pues, revisa la documentación al respecto, que pasa básicamente por

* Pasar parámetros a un form (a través de su evento INIT)
* Devolver valores desde un form al cerrarse, hacia la línea que lo invocó (a través de su evento UNLOAD)

Todo está en el Help de VFP, es cosa de buscar un poco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Manejo de una Clase FORM

Publicado por miguel (9 intervenciones) el 27/05/2011 06:23:35
"con ENTER enviaria los datos del registro a un metodo alojado en el formulario principal para que lo procese y valide una vez validado el registro el foco vuelve al FORM alojado en el VCX y este se desactiva para asi volver al formulario principal que es el de FACTURACION"

entiendo algo de lo que me explicas pero creo que tu no me entendiste del todo, te doy un ejemplo de lo que quiero hacer y que es lo que logre hasta ahora.
tengo una vcx que contiene una clase form, una clase pageframe y una clase page. hago asi porque no se exactamente el numero de paginas que voy a necesitar, esto depende de la cantidad de empleados con determinados privilegios, la "pagina" tiene siempre la misma configuracion.
ahora bien, mi clase form "buscar" tiene que poder ser activada desde cualquier clase page "empleado con privilegio" y trabajar de manera independiente uno de otro, eso ya lo logre, obteniendo el numero de pagina activa creo el objeto, todos son distintos, ademas al cambiar de pagina a pagina, la clase "buscar" desaparese y si no fue cerrada al volver a su pagina dicho empleado la busqueda sigue activa.
Hasta hay todo perfecto, es mas, la clase "buscar" puede cambiar un edit del formulario principal, utilizando este codigo
"n=prueba1.fram2.activepage"
"prueba1.fram2.pages(n).label3.caption=this.Caption"
el problema esta en querer que sea general para cualquier form que lo invoque y evitar escribir "PRUEBA1.fra..."
donde ademas ese nombre "PRUEBA1" es el nombre del archivo .SCX porque intente con "_SCREEN.FORMS(_SCREEN.FORMCOUNT-1).name" pero me da el nombre del form y no me es util
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Manejo de una Clase FORM

Publicado por miguel (9 intervenciones) el 27/05/2011 15:25:24
Juan creo entender lo que me indicas seria algo asi
* Form principal
Do form buscar with parametropasado to parametrodevuelto

* luego en el evento UNLOAD de mi form buscar
return cliente

pasa que no me esta funcionando el "DO FORM .." porque no es un form sino una clase, me da error que no existe el archivo .scx, la linea de codigo que yo utilizo en cada pagina para crear la busqueda es
i=thisform.fram2.activepage
IF VARTYPE(oform(i)) <> "O"
oform(i)=newobject("articulos")
oform(i).caption='Articulos'+STR(i)
oform(i).show
ENDIF

lo hago asi porque necesito tantas busquedas como paginas tenga, cada una tiene que ser individual de las demas y pueden estar abiertas a la vez (yo las oculto de acuerdo a la pagina activa, pero vuelve al estado que tenia al cambiar entre cada pagina)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Manejo de una Clase FORM

Publicado por xx (378 intervenciones) el 27/05/2011 20:11:28
Es precisamente lo que trataba de explicarte usas nada mas que referencias, creas el objeto buscar en el INIT de PRUEBA1 algo asi:

*_obuscar es una propiedad anexada a PRUEBA1 (SCX)
PRUEBA1::INIT()
set classlib to xx.vcx
THISFORM._obuscar=CREATEOBJECT( "BUSCAR", THISFORM )
clear claslib xx.vcx
RETURN

*en el init del objeto buscar
*_fprinc es una propiead anexada al objeto BUSCAR alojada en un VCX
BUSCAR::INIT()
LPARAMETER _fprinc
THISFORM._fprinc=_fprinc
RETURN

con estas dos referencias tienes apuntadores con el que puedes llamar a uno u otro formulario por ejemplo para llamar a BUSCAR desde PRUEBA1 haces
WITH THISFORM._obuscar
.ENABLED=.T.
.VISIBLE=.T.
.SHOW()
ENDWITH
THISFORM.ENABLED=.F.

y para volver desde BUSCAR al formulario PRUEBA1 en el evento deactivate
THISFORM._fprinc.ENABLED=.T.
WITH THISFORM
.VISIBLE=.F.
.ENABLED=.F.
.HIDE()
ENDWITH

este metodo funcionaria igual si tu formulario PRUEBA1 se llamase PRUEBA2 o PRUEBAn.

pero esto no se limita a solamente pasar el foco de uno a otro formulario por ejemplo podrias cambiar el titulo de tu formulario BUSCAR desde PRUEBA1 asi:

* en un metodo de PRUEBA1 (SCX)
THISFORM._obuscar.CAPTION="New Title!!"

o desde BUSCAR podrias consultar un valor de un text alojado en PRUEBA1 (SCX) asi:
* en un metodo del objeto BUSCAR
? THISFORM._fprinc.text1.value


Yo lo utilizo y me funciona!!!!, te cuento que tengo formularios de facturacion, carga de recibos, impresion de resumenes de cuentas y en todos ellos utilizo un solo objeto buscarcliente que por cierto es el mismo que uso tambien para buscarproveedores.

Espero que esta vez si se entienda
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Manejo de una Clase FORM

Publicado por miguel (9 intervenciones) el 28/05/2011 05:06:47
INCREIBLE!!!
muchisimas gracias! la gran solucion era pasarle como parametro "thisform" ahora si puedo utilizar algo asi
n=thisform.fprinc.fram2.activepage
thisform.fprinc.fram2.pages(n).label3.caption="cambio"
lo de ENABLE no lo utilizo porque en realidad la ventana principal tiene que seguir activa dando la posibilidad de trabajar y realizar busquedas propias a distintos usuarios que serian mis paginas del pageframe, pero ya con esto lo solucione.
DE NUEVO MUCHISIMAS GRACIAS, ya no me daban las nueronas, intente crear un array, redimencionarlo y almacenar mi busqueda pero no sabia CUANDO controlar si se habia cerrado mi busqueda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar