PDA

Ver la Versión Completa : ¿Como creo una lista de checkbox y luego acceso a sus propiedades?!!!


NovatoEnObjetos
02-07-2007, 09:32:40
Hola a todos, tengo una sencilla pregunta seguramente, de antemano agradezco a quien me responda.

Resulta, que obtengo un numero entero. A partir de este número, quiero hacer un lista de checkbox y mostrarlos en mi form de forma dinamica.

En otras palabras, quiero hacer un N numero de checkbox, e irles modificando sus propiedades, tales como posicion, name, caption, etc., todo esto para que no aparezcan uno encima del otro y tengan distinto Caption,

Despues, a traves de un boton fijo, que sí es fijo; quisiera saber que checksbox estan seleccionados y cuales no.


nose, me imagino un tipo de respuesta algo asi como lo siguiente:

---------------------------------
nombreInicial:='nuevo';
tops:=20;

for x:=1 to (Numero) do
begin
create(lista[x].checkboxs);//Nose si existe algo como esto
lista[x].name:='nuevo'+inttostr(x);//aqui pondría el nombre del checkbox


lista[x].top:=tops;// Aqui ubicaria al nuevo checkbox en una posición distinta al del anteriormente creado
tops:=tops+40;
end;

---------------------------
Y de la misma forma recorrer la lista para saber cuales fueron selecionados y cuales no.

O al menos asi mas o menos, por eso es mi pregunta, porque nose como hacerlo, asi se me habia ocurrido,pero no me funcionó :(


Como le hago?

Por adenlatado agradesco la atencion prestada, ya que las necesidades en la programacion me han hecho acudir a esta pregunta. Es un buen principio, he visto otras preguntas y respuestas, pero no les e entendido y pues si no me e explicado adecuadamente, porfavor aganmelo saber...:)

Neftali [Germán.Estévez]
02-07-2007, 09:57:28
Para almacenar los controles piedes usar un array o un ObjectList que está pensado (o va muy bien) para estas cosas.
Para crear los componentes puedes buscar en los foros; Hay mucho código ya que es un tema que hemos tratado otras veces (el códio que pones no va desencaminado).
Mira aquí (http://www.clubdelphi.com/foros/showthread.php?t=45390&highlight=crear+componente) o aquí (http://www.clubdelphi.com/foros/showthread.php?t=34849&highlight=crear+componente); Aunque si buscas encontrarás más hilos sobre el tema.

Pruébalo y si tienes problemas dínoslo. El problema está muy bien explicado, pero intenta ser más concreto en las preguntas.

Un saludo y bienvenido a los foros.

dec
02-07-2007, 10:21:13
Hola,

¿Y qué hay del componente "TCheckListBox"?

NovatoEnObjetos
02-07-2007, 10:24:55
Hola Neftali, te agradesco inmensamente el haber leido mi pregunta,
pero aun tengo un par de dudas.

Bueno, ya créo los checkbox dinamicamente, y en distinto lugar del form, pero ahora como acceso a sus propiedades?, es decir, ¿como sé si esta seleccionado el objeto al cual cree puse un nombre dinamicamente?.
En cuanto al ObjectList, es una propiedad del form? o es un tipo de objetos? a que libreria pertenece?, me podrías explicar que es el ObjectList?, veo que muchos lo mencionan pero no e encontrado algun ejemplo de su utilización, o si pertenece a alguna libreria, o si es un objeto de la paleta de delphi,

Por cierto, se me habia olvidado mencionar que estoy usando delphi 7,


Y gracias neftalí, de veras se te agradece desde mexico!!

NovatoEnObjetos
02-07-2007, 10:46:09
Hola Dec, creo que no resolviste mi pregunta, pero si me diste una idea para hacer lo que queria,

Aunque me gustaria saber de alguna forma como resolver la pregunta inicial, por futuras necesidades, como por ejemplo, si en vez de checkbox, fueran tedit y quisiera saber que escribió el usuario en tiempo de ejecución, en cada uno de los edit.text

dec
02-07-2007, 10:54:54
Hola,

Pues como te comenta Neftalí puedes usar un "TObjectList" (unidad "Contnrs") para ir almacenando las distintas instancias de los objetos que crees en tiempo de ejecución. Si escribes "TObjectList" en el editor de código de Delphi, sitúas el cursor sobre dicho "tipo" y pulsas la tecla "F1"...


Use TObjectList to store and maintain a list of objects. TObjectList provides properties and methods to add, delete, rearrange, locate, access, and sort objects. If the OwnsObjects property is set to true (the default), TObjectList controls the memory of its objects, freeing an object when its index is reassigned; when it is removed from the list with the Delete, Remove, or Clear method; or when the TObjectList instance is itself destroyed.


Puedes seguir con la ayuda echando un vistazo más pormenorizado a los métodos que te ofrece la clase "TObjectList". Ponte a ello y si encuentras algún problema lo comentas por aquí.

NovatoEnObjetos
02-07-2007, 11:06:17
Hola dec
Ahora si, ya veré lo que puedo hacer con el TObjectList, Nadie habia mencionado que pertenecía a una unidad llamada "Contnrs",

Gracias de veras, y por lo del "F1" jejeje, lo que pasa es que un antivirus que instalé, del que no mencionaré su nombre para no darle publicidad, solo dire que es ruso, me eliminó los archivos de ayuda del delphi. Gracias, Muchas Gracias, procuraré entrar seguido al foro, ver en que ayudo a los demás y ya reinstalaré delphi.




Saludos!!!

dec
02-07-2007, 11:14:25
Hola,


Ahora si, ya veré lo que puedo hacer con el TObjectList, Nadie habia mencionado que pertenecía a una unidad llamada "Contnrs",



Pues como te comenta Neftalí puedes usar un "TObjectList" (unidad "Contnrs") (...)


Como ves no leíste bien mi anterior mensaje. En todo caso adjunto un sencillo ejemplo, que, si bien no explora todas las posibilidades de "TObjectList" (por ejemplo) tal vez pueda servirte de algo.

NovatoEnObjetos
16-07-2007, 13:45:15
Lo que queria decir es que nadie antes habia comentado que el TObjectList pertenecia a la unidad Contnrs, y lo estaba resaltando, osea que tu lo dijiste pues, te agradesco el ejemplo que as subido, ya lo estoy estudiando con detenimiento, y a neftalí por sus respuestas que tambien me sirvieron de mucho...:)

gabrielkc
16-07-2007, 19:13:19
Bueno, ya créo los checkbox dinamicamente, y en distinto lugar del form, pero ahora como acceso a sus propiedades? ¿como sé si esta seleccionado el objeto al cual cree puse un nombre dinamicamente?.

puedes usar el FindComponent:


var ChkBox:TCheckBox;
begin
ChkBox:=FindComponent('nombre_componente') as TCheckBox;
if ChkBox<>nil then
ChkBox.Checked:=True;
end;


Para que el código anterior funcione es importante que cuando crees el componente especifiques a la forma como dueño del componente, o bien llamar el FindComponent del dueño de dicho componente.


ChkBox:=TCheckBox.Create(Form1);

NovatoEnObjetos
16-07-2007, 21:44:26
:) Oye Gabriel, de veras que me has ahorrado un buen, al igual que los demas compañeros, creo que me falta leer un poco mas, pero ya probé lo que expones y me sale de maravilla, ya que me ha surgido la necesidad de hacerlo con 24 tedits, y hago limpias de texto en un solo for, en verdad estoy agradecido a todos los que han participado, ya que me han sacado de varios apuros de varias formas, cada vez aprendo mas del lenguaje, es bueno saber que cuenta uno con ustedes...:)


Aqui un ejemplo de lo que hice



procedure TForm1.Button3Click(Sender: TObject);
var
edit:Tedit;
x:integer;
begin
edit:=nil;

for x:=2 to 25 do
begin
edit:=FindComponent('edit'+inttostr(x)) as Tedit;
if edit<>nil then
edit.Text:='';
end;//fin del for

end;//fin del buttonclick


asi lo hice jeje, gracias a todos!!!! y alguna otra opción que me enseñe mas sera agradecida sinceramente....


su servidor NovatoEnObjetos