![]() |
Un Evento comun, distintas variables
Hola!!
Pues tengo este procedimiento para un checkbox, ¿como evitar repetirlo para varios mas? -en este caso solo 12- considerando que el estado de cada uno de ellos se guarda en una variable. Se que debo usar Sender para verificar que componente llamo al procedimiento pero no encuentro como diferenciar la variable donde guardar el estado.
Gracias por su aporte!! |
Hola,
Supongo que digo una tontería, pero, ¿no te vale ya con saber el estado de cada CheckBox? Es decir, ¿para qué una variable (si es como yo lo entiendo) que guarde el estado de cada CheckBox cuando estos ya cuentan con la propiedad "Checked"? Fíjate que el código de arriba puede resumirse en una única instrucción:
|
Si son 12 Checkboxes, necesitarás 12 variables; que mejor que usar un array y la propiedad Tag de cada Checkbox.
A cada Checkbox en su propiedad Tag le pones un número correlativo, desde 1 hasta 12:
El moldeo es necesario, porque en delphi tenemos un evento TNotifyEvent que es estándar para muchos controles, por ejemplo el evento OnClick, que podríamos asignar el mismo procedimiento para un TCheckbox, Tbutton, TEdit, etc. Nosotros somos los que asignamos el evento en el inspector de objetos, por tanto, somos los responsables de decirle a Delphi con el moldeo de tipos qué control generó el evento en cuestión. El caso más general:
Saludos |
Hola!
Gracias por las respuestas muchachos! De hecho he tenido que modificar la aplicacion y en un momento determinado ya no sabia ni que estaba haciendo -aun no lo se- pero ya despues de consultar la almohada traigo ideas mas frescas. Nuevamente gracias por su dispocision a ayudar siempre! |
Bueno de nuevo por aqui.
Esto es lo que he hecho a manera didactica -:p hasta parece que se de que hablo:D-
Aun quedan cosas por hacer que ando investigando. Se aceptan todas las ayudas. Añado un zip con el codigo fuente y sin ejecutable de este proyecto. |
De vuelta aqui!
he modificado el procedimiento que muestro aqui del original de mi mensaje anterioR y me genera un error de Addres violation no entiendo por que pero si se en donde lo hace.
Nuevamente soy todo oidos!! |
Hola,
No sé si me hago un lío con el código y sus comentarios, pero, la variable "Check" (que te causa el problema) parece no estar inicializa en ningún sitio. De ahí el "Access violation", ¿no? Copia el código que usas tal cual, sin comentarios expresos, a ver si yo, por lo menos, lo entiendo mejor, porque, tal vez lo que digo de la variable "Check" no se te escape a ti... |
Tienes razón Dec!
De hecho era un copiar y pegar del codigo entre comentarios que funcionaba Ok, no me fije que el Check no existia en el otro codigo.
La aplicacion tiene dos paneles Panel1 y Panel2 ¿como haria un recorrido individual de cada uno de ellos para saber si mas de un checkbox esta seleccionado en cada panel? Adjunto el codigo completo ya corregido. Sigo escuchando. Gracias. p.d. En el mensaje antepenultimo tambien esta el codigo original. No encuentro como eliminar el zip para que no se repita. |
Hola,
Si puedes recorrer los componentes situados en un panel... de la misma manera puedes recorrer el de los situados en otro. Claro está, primero recorrerías los de uno y luego los del otro. Pero, ¿dónde encuentras la dificultad? Seguro que se me escapa algo. ;) PD. Respecto de quitar el zip... fíjate que en el formulario de edición del mensaje hay un botón de nombre "Manejar adjuntos" o algo así... pues sólo tienes que pulsar sobre el botón, se te abrirá una ventana desde la que podrás añadir nuevos adjuntos, borrar los ya incluidos, etc. :) |
Bueno, mira la dificultad que encuentro para recorrer el panel es que de acuerdo al codigo que puse yo busco un componente de tipo TPanel, asi como esta no importa si hay uno, dos o mas paneles el ciclo los recorrera todos. Entonces de ahi que supongo que debo buscarlos por nombre y entonces recorrer cada uno, como dices tu algo se me esta escapando que no logro entenderlo.
Lo del archivo adjunto fijate que no es en la parte que dices, es desde las preferencias de usuario (menu User CP) Nunca la habia visto a detalle. |
Hola,
Cita:
Lo que pasa es que donde tú dices gestionas todos tus adjuntos, de todos tus mensajes, pero, donde digo yo gestionas los adjuntos del mensaje que estés editando nada más. Míralo y verás que es así... ¡o me corto la coleta! :D |
Hola
Perdón que me meta en esto. No entiendo la razón del programa, para que sirve o va a servir?. Lo digo por que me parece muy extraño que se hable de variables y luego de recorrido de componentes. Me parece que seria interesante saber que se busca con el programa, asi se podria aportar algo, aunque sea poco.;) Saludos |
:D
Si tienes razon Caral! empezamos con como saber el estado de un checkbox, y despues vimos que se podian hacer otras cosas. Bueno el programa en si es otro, aqui solo estoy tratando de resolver algunas dudas con respecto al uso del checkbox y de paso manejando otros metodos como en este caso el recorrido de componentes, habilitar y deshabilitar elementos de un radiogroup tambien base al estado de un checkbox y mostrar estados de los checkboxes en un memo o sea que tal vez salga algo didactico al final. Ya se que tu tienes a "NOVATO" como Marca Registrada de Caral Enterprises pero aun asi te invito a ver y hacer tus aportes. |
Hola
Pues la verdad no se en que puedo colaborar en este Tutorial. Lo poco que pueda, con gusto, pero no se en que?, me dices? Saludos |
Manos a la obra!
Mira aqui en el evento OnClick del checkbox1 es donde se origino todo. La idea original era que al dispararse el evento Onclick del CheckBox1 se guardara el estado en una variable sin embargo si son varios checkbox se puede usar la caracteristica de codigo compartido de los componentes; es decir que el codigo se escribe una sola vez y lo usan varios CheckBox (en este caso, podrian ser Buttons o algun otro) yo pensaba usar una variable y eso me causaba el disgusto de como saber que checkbox era el que habia sido seleccionado y entonces como saber en que variable se guardaria. Para dos o tres no es mucho problema repetir el codigo -aun asi seria una mala practica ¿no?- pero si son mas 10, 15 30 etc. Bueno eso lo resolvio -en un hilo que menciono dentro del zip- Lepe y si lo observas muy elegantemente.
|
Despues se me ocurrio que si tenia 4 selecciones podria crear grupos. Bueno entonces añadi un RadioGroup con 4 elementos -¿para que servirian estos?- no se, tal vez reportar valores individuales o el valor de una suma en base a los datos agrupados asi que a el radiogroup le añadi dos elementos mas que representaban dos grupos. Al crear el formulario siempre se muestran los 6 elementos del radio group ¿pero por que mostrar activados los elementos de grupo si no hay definido aun ningun grupo? bueno eso tambien esta resuelto en Club Delphi
|
Hola,
Si estamos sólo especulando y haciendo cábalas... yo diría que, aunque es posible asignar un evento "OnClick" a los "Checkbox" y, como dices, varios "Checkbox" pueden compartir el mismo método para dicho evento, sin embargo, en mi opinión, no es lo habitual. Los "Checkbox" representan "opciones", por decirlo así, pero, no tienen porqué utilizarse para otra cosa. ¿Qué quiero decir? Imagina un formulario que contenga 14 Checkbox que permitan especificar otras tantas opciones al usuario. ¿Qué hacemos para guardar las opciones? ¿Utilizamos el evento "OnClick" de un Checkbox? ¿Usamos un método para esto que además compartan el resto de Checkbox? Yo creo que no. Tendríamos un botón en el formulario que dijera "Guardar opciones". Y el evento "Onclick" del botón sería el que nos interesaría y sobre el que actuaríamos. Es lo que comenté más arriba: ¿para qué guardar en variables el estado de los Checkbox cuando estos ya cuentan con sus propias variables (propiedades)? Así, al guardar las opciones (siguiendo con el ejemplo), en el evento "Onclick" del botón comprobaríamos el estado de los Checkbox y actuaríamos en consecuencia. Creo que esto es infinitamente mejor que utilizar de cada Checkbox su evento "OnClick". Dicho de otro modo: de un botón, por ejemplo, espero que haga algo cuando se pulse sobre el mismo. De un Checkbox no espero eso (aunque lo pueda hacer), sino que, espero que "indique" un estado: marcado o no. Que ya revisaré cuando sea preciso. ¿Eh? ¿Qué tal parece esto? :) |
Si tienes razon Dec, de hecho es lo que necesitaba para mi programa pero ya estaba liado con todo que no veia lo facil que era, sin embargo quedaron ideas inconclusas y me di cuenta que hay cosas que no se por eso le di seguimiento a esto y de ahi salio este "programita" que como dije a lo mejor termina siendo didactico -al menos para mi ya lo es-:)
|
Bien, pues al revisar lo que habia hecho me di cuenta que coloque los checkbox dentro de un panel (en realidad dos paneles con 4 checkbox cada uno) y estos a su vez dentro de un GroupBox, ¿Como saber que checkBox esta seleccionado? Facil, tambien esta la respuesta en club Delphi, en este caso añadi un memo para ver los valores.
|
Otra mas el codigo anterior recorre todos los componentes del formulario buscando los checkbox -"desperdiciando tiempo y ciclos del cpu"- si yo se que estan dentro de un panel bueno pues buscalos solo en los paneles que a su vez estan dentro del groupbox. Asi que cambie el codigo por este
y aqui es donde termina la triste historia de un vaquero enamorado...:p Me falta saber como recorrer cada panel (en forma individual, este codigo recorre todo lo que se llame Panel y este dentro del radio group) y si hay mas de un checkbox seleccionado active el elemento correspondiente del radio group. p.d. Con esto tambien subio el numero de menasjes que tengo:D:D:D |
La franja horaria es GMT +2. Ahora son las 07:22:08. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi