Llamar a una ocx del form principal desde otro form

Hola Javi, mi inquietud es la siguiente:
Estoy desarrollando un sistema y este se tiene que comunicar con los demás terminales, desarrolle un servidor de chat donde cada aplicación se comunica con este servidor y deriva el mensaje al terminal que corresponda, hasta ahí todo bien.
En el formulario "PRINCIPAL" de mi aplicación tengo un control winsock que recibe los mensajes y debe llamar al form que esta diseñado para el chat, resulta que este form debe enviar la conversación por este winsock que esta en el form principal, el código seria algo así
principal.winsock1.object.senddata(chat)
chat es una variable que almacena la conversación y la envía al servidor.
Resulta que cuando doy click en el botón enviar del forumario chat me dice que no se conoce el elemento "principal".
¿Me podrías dar una orientación sobre esto?.
Desde ya muchas gracias.
David Silva
Uruguay

1 respuesta

Respuesta
1
La funcionalidad que armaste parece estar correcta, el único detalle que tenés que cambiar es que cuando hagas referencia al form principal no debes usar el nombre de la clase sino el nombre de la variable donde instanciaste la misma. Por EJ:
Si yo creo un form llamado PRINCIPAL todo el código que contenga dentro, para hacer referencia a sí mismo uso el comando Thisform. Si quiero hacer referencia desde fuera esta sería la forma:
(Usas la variable para instanciar la clase)
loPrincipal = CREATEOBJECT("principal")
loPrincipal.winsock1.object.senddata(chat)  
Espero te haya sido de utilidad, no dudes en consultarme si no encontrás solución o si no comprendí tu pregunta.
Salu2 y exitos.
Ok, lo voy a probar y te comento.
Gracias por la pronta respuesta
David Silva.
Hola Javi, mira probé el código que me dices pero me da el siguiente error:
"No se encuentra la definición de clase PRINCIPAL."
Me sale ese error.
Eso sucede o porque no es una clase que se encuentre dentro de una librería, sino dentro de otra clase; o porque no tenés hecho el SET CLASLIB TO "nombre vcx".
¿Originalmente me mencionaste "En el formulario "PRINCIPAL" de mi aplicación" ese formulario cómo lo ejecutas? ¿Con un createobject o con un addobject o se encuentra dentro de un form que levantas al inicio del programa?
Hola javi, el form principal de mi aplicación es el form donde se abren todos los demás formularios, sea es el form que siempre esta visible y los demás se abren dentro de el.
Lo que necesito es algo así:
Tengo mi form "principal" con un control winsock.
Este al recibir un mensaje evalúa si esta abierto el form correspondiente al chat
Si esta abierto le envía el mensaje
Si no
Lo abre y envía el mensaje
El form chat lo que hace es enviar y recibir los mensajes a través el winsock del formulario principal.
Aver si así queda mejor explicado.
Desde ya muchas gracias
Pero hay algo más que necesito que me aclares, tu formulario PRINCIPAL, de donde se abren todas las aplicaciones tenés que ejecutarlo de alguna forma por primera vez, ya sea haciendo un createobject en el PRG principal, o ejecutándolo desde un menú, si lo tienes configurado como formulario principal directamente desde el proyecto en ese caso no puedes usarlo como referencia.
Lo que yo te sugiero es que armes un PRG que se llame INICIO o ARRANQUE en donde crees sobre una variable pública el form PRINCIPAL para luego hacer referencia al mismo usando dicha variable.
EJ:
PUBLIC loPrincipal
loPrincipal = CREATEOBJECT("PRINCIPAL")
loPrincipal.Show()
Ejecutando eso como programa de inicio te queda la variable loPrincipal para usarla donde vos quieras. Y gracias a eso podes invocar al método loPrincipal. Winsock1. object. Senddata(chat) desde donde tu quieras.
Ok.
La verdad el formulario principal de mi aplicación lo cree con el diseñador de formularios. En
el programa de inicio tengo el siguiente código.
set defa to c:\aplicacion
set path to datos
set safety off
set talk off
set sysmenu off
application.visible=.f.
do form principal
read events
Voy a probar crear el el form desde un prg
aver si soluciono y te confirmo
Muchas gracias.
Ok, espero puedas. Si concluís con tus dudas te agradecería que pudieras calificar mi desempeño.
Salu2 y exitos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas