Duda otra vez con el checkbox en delphi

Ayer te consulte por los checkbox en delphi, y acá te paso nuevamente mi inquietud.
Mira, lo que hice fue en el evento formcreate del formulario, a un objeto Tcheckboxlist agregarle los checkbox de esta manera:
while not MySQLQuery3.EOF do
begin
tit.Items.Add(MySQLQuery3.FieldbyName('titnom').AsString);
MySQLQuery3.Next;
end;
(Por supuesto que antes inicializo la query). Eso funciona bien, pues al iniciar el form me muestra el list con los checkbox adentro haciendo referencia a los títulos profesionales que tengo cargados en la bd.
Pero el usuario puede elegir varios, y yo quiero detectar cuales eligió.
Con lo que me propusiste, me da error en el Tcheckbox y si lo saco después en el check acusa que no esta declarado, y como recién me inicializo en delphi, no se si lo que estoy haciendo es lo que me decís de crear primero los checkbox en un TList.
Si puedes y se entiende que tengo hecho, te pido que digas si aun sigue sirviendo lo que me acabas de decir. Si necesitas más datos, te los envíos.

1 Respuesta

Respuesta
1
No conozco la estructura del tipo TCheckBoxList (supongo que sea una heredera de la superclase TList, pero nunca la he utilizado).
Lo que yo te proponía es crear una variable de tipo TList e ir guardando los checkbox. Te pongo a grosso modo los pasos a seguir:
- Creas una variable TList
lista: TList;
[...]
lista:= TList.Create(Self);
- Debes también crear una variable (con una basta) de tipo TCheckBox.
opcion: TCheckBox;
- Según vas recorriendo los resultados, configuras "opcion" con los datos necesarios y la guardas en "lista" (una vez guardado, no hay problema en sobreescribir "opcion" en el siguiente registro.
opcion:= TCheckBox.Create(Self);
opcion.Checked:= false;
opcion.Name:= 'opcion' + intToString(i); // i puede ser un contador que aumente a cada pasada del bucle de la BBDD
opcion.Caption:= MySQLQuery3.FieldbyName('titnom').AsString;
opcion.Top:= 100;
opcion.Left:= 100; // Los valores de Top y Left pon los que quieras para cada uno.
opcion.
lista.add(opcion);
- Ahí ya hemos guardado una referencia al checkBox para no perderlo. Avanzamos en los resultados y hacemos lo mismo para cada registro encontrado.
- Al final tendremos un TList (lista) con una referencia a todos los registros.
- Cuando queramos ver la elección del usuario, vamos recorriendo la lista comprobando uno a uno cada uno de sus valores. Para ello, extraemos cada elemento en la variable "opcion" (como ves, una sola variable puede dar mucho juego a lo largo de la ejecución).
for i:= 0 to lista.Count do
begin
// Extraemos el objeto
opcion:= (lista.Items as TCheckBox);
// Comprobamos el dato
if opcion.checked then
ShowMessage('ACTIVADO')
else
ShowMessage('NO ACTIVADO');
end;
Con eso no debería darte problemas. No he hecho yo eso con CheckBox pero sí lo he utilizado para crear dinámicamente para crear una interfaz gráfica combinanto componentes TImage y componentes TGauge.
Espero que te sirva de ayuda.
Un saludo
David Rguez.
Técnico en programación
JLM - Software
(Zamora - España)
Hola! De vuelta yo...
¿Sabes? Hago tal cual tu última rta, pero el checkbox no aparece!
opcion:= TCheckBox.Create(Self);
opcion.Checked:= false;
opcion.Visible:=true;
opcion.Name:= 'opcion1';
opcion.Top:= 100;
opcion.Left:= 100;
lista.AddItem('Check' ,opcion as TCheckBox);
Esto en el evento de inicializacion del form.
La lisa ya la tengo en el formulario, por eso luego no la creo. También cuando a la lista le agrego el checkbox, uso additem y no add, pues con add me da error, y additem es el que permite a la lista, agregarle justamente un item. Cuando ejecuto, veo la lista con un item que dice "Check" y a su lado, que debería aparecer el checkbox no sale nada.
¿Estoy haciendo algo mal? Si no puedes seguir ayudando, por tiempo o lo que fuere, no hay problema, solo dímelo.
Te agradezco tus ayudas
Saludos
Creo que estamos hablando de cosas distintas. La TList de la que estoy hablando no es un componente visual (al menos, nunca la he visto reflejada en los formularios) sino un componente de organización.
¿Seguro qué no te deja usar "Add"? ¿Te has asegurado que sea un TList y no cualquier otro tipo de lista? ¿Qué error te da?
Por otra parte, me olvidé de poner en el ejemplo la configuración de la propiedad Parent. Tienes que asignarle a esa propiedad quién va a ser el controlador del checkbox (si usas un panel, le pasas ese panel como valor, si no, le pasas el propio formulario).
David Rguez.
Técnico en programación
JLM - Software
(Zamora - España)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas