C/Visual C - Habilitar boton desde modulo aparte

 
Vista:

Habilitar boton desde modulo aparte

Publicado por Vito (17 intervenciones) el 07/05/2007 11:12:11
Hola, necesito hacer eso mismo.

Tengo varios botones declarados dentro de la clase del formulario.

El asunto es que estoy intentando habilitarlos e inhabilitarlos desde funciones externas a la clase, y de momento he probado diferentes cosas:
-Declarar la funcion como miembro de la clase
-Ponerla como publica, protegida...
-Llamar al boton que deberia hacer las funciones propias y que llamado desde dentro del formulario lo hace bien...

El tema es que desde fuera de la clase del formulario no se deja. Alguien sabe que deberia cambiar?
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

RE:Habilitar boton desde modulo aparte

Publicado por Nelek (816 intervenciones) el 07/05/2007 14:01:55
Hola,

en primer lugar el CFormView tiene que estar en activo, y has de conseguir una referencia/puntero a dicho formulario. Los botones tienen que tener su variable miembro de tipo Control (Button) y ser de tipo publico, para poder acceder a ellos a traves de la referencia/puntero de su "contenedor" (el formulario).

En caso de seguir teniendo problemas con el llegar a ellos, prueba a ver con la relacion de Padre-Hijo que hay entre el formulario y los botones incluidos en el mismo.
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

RE:Habilitar boton desde modulo aparte

Publicado por Vito (17 intervenciones) el 07/05/2007 14:59:55
Que quieres decir con la relacion "PADRE HIJO" que hay entre los botones?

he comprobado todo, el formulario esta activo, envio a la funcion como parametro el puntero al formulario, que lo tengo guardado en una variable desde el principio de la ejecucion del programa, los botones y todos los objetos son publicos...

Lo que me mosquea es que desde esa funcion puedo acceder e insertar datos en una grid, modificarla... Y lo que no puedo hacer es poner el boton inhabilitado, aunque este en el mismo formulario!! Por que uno si puedo manejarlo desde esa funcion y el otro no?

Gracias.,
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

RE:Habilitar boton desde modulo aparte

Publicado por Nelek (816 intervenciones) el 08/05/2007 08:09:10
A ver... Como dijo Jack el Destripador... Vayamos por partes.

En que programas? VC++ o BC++?? Cuando dices Formulario te refieres a una derivacion de CFormView, de CDialog (VC++) o a un Formulario central (BC++)?

Cuando dijo la relacion Padre-Hijo me refiero a que, en MFC, los botones son derivaciones de la clase CWnd por lo tanto puedes establecer una relacion de Parent-Child entre el boton (Child) y la ventana que lo contiene (Parent) y utilizarla para acceder a ellos mutuamente, aunque no siempre es necesario.

De todas maneras, seria mas facil si describes un poco mas detallado tu situacion. Como tienes declarado al boton? Tiene variable miembro? Puedes modificar otras caracteristicas del boton o directamente no llegas hasta el aunque si que puedes llegar a otros elementos del mismo formulario? Que funcion usas para habilitar/deshabilitar? Desde donde y como la usas? Te da algun fallo o simplemente no hace nada?... etc
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

RE:Habilitar boton desde modulo aparte

Publicado por Vito (17 intervenciones) el 08/05/2007 08:58:03
OOPS. Vale. Es posible que no haya aportado muchos datos... Sorry!! Comento:

Programo en Visual C++. Cuando digo formulario, basicamente me refiero a un CDialog (pero le llamo formulario por que soy un novato venido de Visual Basic...).

Repasare lo del parent-child a ver si saco algo en claro. Mientras tanto...

Veamos. Como los botones y en general los objetos que se incluyen en VC++ me parecen muy poco personalizables, en algunos casos me descargo un ActiveX que sustituya al control. por ejemplo, uso como botones un control llamado MyHoverButton ya que puedo establecer su color, texto, imagenes cuando esta presionado, suelto, con el foco, etc... Si lo quereis probar esta aqui: http://cuinl.tripod.com/ActiveX.htm

Los botones y demas componentes estan todos declarados publicos dentro de la clase del CDialog principal. Tengo label, grid, check box...

Ahora mismo lo que estoy intentando (o me han mandado) es realizar una funcion que se almacena en un modulo aparte, un archivo donde tener aparte todas las funciones, que habilite o inhabilite los botones segun convenga. Pues he probado a declarar la funcion dentro de la clase del CDialog principal como protegida, como publica, he probado a ponerla como protegida y a hacer una publica que acceda a la protegida, he probado pasando un puntero del CDialog principal como parametro a la funcion...

Lo curioso es que consigo dar forma a una grid, insertar registros en ella, cambiar el caption y el color de una label... Pero no consigo acceder a los botones. Y eso que estan dentro de la misma clase CDialog declarados de la misma manera. En cuanto llega la primera linea de " m_Boton1.SetEnabled(TRUE); " recibo un error de Unhandled exception, Access Violation y una direccion en memoria tipo 0xc0000005 o algo asi (la escribo de memoria...).

Esoy empezando a sospechar que tenga que ver con que el boton sea externo a VC++, ya que los controles propios se pueden manejar pero el boton que me he descargado no...

Espero haberme explicado mejor. De todas formas Nelek, gracias por responderme y consiga lo que consiga lo posteare por si sirve a alguien.
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

RE:Habilitar boton desde modulo aparte

Publicado por Nelek (816 intervenciones) el 08/05/2007 14:51:21
" m_Boton1.SetEnabled(TRUE); "

mmmm...

Prueba con:

m_Boton1.EnableWindow (TRUE);

Si compruebas la propia ayuda del VC++ comprobaras que el "SetEnabled" es para WFC y Java o dentro del MFC, para un COleControl y, ninguna de las dos, tiene nada que ver con los CButton.
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

RE:Habilitar boton desde modulo aparte

Publicado por Vito (17 intervenciones) el 08/05/2007 16:54:09
DIOOOOOOOOOOOOOOOSSS!!!!!

GRACIAAAAAAAAAAAAAS!!!

Llevo casi una semana con eso, si no llega a ser por ti podria estar un mes mas como minimo!!!

Como soy nuevo, yo vi SetEnabled(TRUE) y me funcionaba con la mayoria de los controles, por lo tanto como se me iba a pasar por la cabeza que podria estar usando una funcion incorrecta??

Debe ser que el boton que estoy usando (My hover Button) al no ser propio de Microsoft como la grid y demas no acepta esa funcion, al reves que el resto de los controles que como son de microsoft imagino que "me lo perdonaran".

Muchisimas gracias de nuevo!!!
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

RE:Habilitar boton desde modulo aparte

Publicado por Nelek (816 intervenciones) el 09/05/2007 09:47:11
jejejeje,

tranquilo que es algo que pasa. Te recomiendo que a partir de ahora eches un vistazo a la ayuda y compruebes para que libreria esta habilitada la funcion que consultas. Las MFC no siempre son compatibles con las WFC, Java o demas.

Para el tema de los controles... Yo intentaria usar las funciones que tocan, aunque las que uses te las "perdonen" los controles. No sea que por alguna de aquellas luego tengas fallos al portar tu programa a otros pcs, ya que puede que alguna necesite de alguna libreria o dll que no se encuentre dentro del paquete "standard" de windows y no te funcione en algun pc
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