PDA

Ver la Versión Completa : Dudas con un CheckList...


darkphantom
28-02-2007, 07:37:18
veamos tengo estas dudas:

1. como controlo los items seleccionados? necesito seleccionar 4 de una lista.... si los "selecciono" si se, pero al deseleccionar???? :p

2. le puedo poner "iconitos" dentro?? he visto hacerlo en un LiSTBOX por eso pregunto. :confused:

3. komo obtengo los items completos ?? por ejemplo le pongo al item "cuadrado" y me envia "uadrado". :D

por el momento estas son mis dudas......alguien me ayuda?
se los agradeceria mucho. :)

joHn je@N
28-02-2007, 09:21:20
Espero te ayude. Nunca he usado ese componente(soy novato pero, con ganas de ayudar). Y logre esto:


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ckbox.AddItem('item ' + IntToStr(ckbox.Count + 1), self);
Label1.Caption := 'Has agregado ' + 'item ' + IntToStr(ckbox.Count);
end;

procedure TForm1.ckboxClickCheck(Sender: TObject);
begin
if ckbox.Checked [ckbox.ItemIndex] then
Label1.Caption := 'Seleccionado: ' + ckbox.Items.Strings [ckbox.ItemIndex]
else
Label1.Caption := 'Deseleccionado: ' + ckbox.Items.Strings [ckbox.ItemIndex];
end;


SALUDOS!!!

Bicho
28-02-2007, 11:06:57
1. como controlo los items seleccionados? necesito seleccionar 4 de una lista.... si los "selecciono" si se, pero al deseleccionar????

2. le puedo poner "iconitos" dentro?? he visto hacerlo en un LiSTBOX por eso pregunto.

3. komo obtengo los items completos ?? por ejemplo le pongo al item "cuadrado" y me envia "uadrado".

1) :confused: :confused: :confused: ¿Lo puedes explicar? No entiendo nada. ¿Deseas controlar cuando se ha deseleccionado un item?

2) En un CheckList creo que no, pero puedes usar el TreeView de la pestaña Win32 que te permite establecer jerarquias y poner iconos y hacer multiselects, pero ahora que miro creo que no tiene el Check para marcar un item.

3) Tampoco lo entiendo, algo debes hacer para que te borre el primer carácter. ¿Puedes poner esa parte de código?

Saludos

darkphantom
28-02-2007, 14:49:45
en cuanto a joHn je@N. voy a probar el codigo a ver ke sale y te aviso hermano, yo no soy experto, pero si he usado, y ahorita la verdad akabo de temrinar un proyecto y no me da mucho la cabeza para pensar :), te agradezko el codigo y si no va, buscare la idea ke das para adaptarla, :)
gracias.

en cuanto a lo de bicho:

1. si, deseo controlarlo, porke kiero tener 4 items seleccionadas MAXIMO, y si selecciono 4 si puedo controlarlo, pero si el usuario des-selecciona 1, pierdo el control de los 4.

2. he usado en los LISTBOX junto a un IMAGELIST el ponerles dibujitos (iconitos) pero kiero ver si con el checklist se puede.

3.pues para obtenerlo solo hago :


dato:=checklist.itemindex;
stringgrid1.cell[0,i]:=checklist1.items.valuefromindex[dato];

Bicho
28-02-2007, 16:30:06
1. si, deseo controlarlo, porke kiero tener 4 items seleccionadas MAXIMO, y si selecciono 4 si puedo controlarlo, pero si el usuario des-selecciona 1, pierdo el control de los 4.

2. he usado en los LISTBOX junto a un IMAGELIST el ponerles dibujitos (iconitos) pero kiero ver si con el checklist se puede.

3.pues para obtenerlo solo hago :
stringgrid1.cell[0,i]:=checklist1.items.valuefromindex[dato];

Vamos a ver:

1) No tienes que perder el control de eso. El checkListBox tiene la propiedad Selected a la que le indicas el indice que quieres saber si está seleccionado y te devuelve true o false
2) No veo nada al respecto
3) No se de donde sacas ValueFromIndex. Debería bastarte con esto:

stringgrid1.cell[0,i]:=checklist1.items.strings[dato];

A todo ésto. ¿que versión de Delphi estás usando? Es que no encuentro la propiedad ValueFromIndex y hablas de CheckList en lugar de CheckListBox :confused:

Saludos

Lepe
28-02-2007, 16:43:33
darkphantom no tengas miedo a explicar desde un principio lo que quieres hacer, porque aqui no se cobra por palabras, hombre.

hablas de un CheckListBox, pero no es lo mismo seleccionar que marcar, se permiten ambas cosas.

"seleccionar" es hacer clic en un elemento de lista y que quede con fondo azul (seleccionado)

"marcar" es poner la marca de verificación a su casilla correspondiente.

¿qué quieres, seleccionar o marcar?

Por otra parte, cuando obtienes "uadrado" es porque accedes incorrectamente a los items.

No uses las propiedades Values, Sections, ValueFromIndex, etc, ya que eso pertenece al TStrings, y está pensado para archivos ini donde guardas un par de valores al estilo:

Nombre=Pepe

Nombre es lo que se llama "llave" (key) y Pepe es lo que se llama el valor (Value), de tal forma que ambos estan emparejados. Cuando accedes con la propiedad Values, internamente delphi cree que tiene el símbolo igual "=" a su izquierda, por eso te devuelve una letra menos.

Para rescatar un valor, usa esto:

with Checklistbox do
if itemindex <> -1 then
ShowMessage(items[itemindex]);



Por eso, lo mismo de antes, explica qué quieres hacer. Además en principio, se resuelve una duda por cada hilo; si empezamos a hablar de 3 temas distintos en un mismo hilo se puede formar la gorda :D.



Saludos

Lepe
28-02-2007, 16:54:15
Para las otras 2 preguntas... vamos por parte:
- Si quieres dibujar iconitos... vete tú mismo a dibujar el control, que no, que no estoy de mal humor, es que tienes que poner su propiedad Style a owner-Draw y usar técnicas de pintado para colocar los iconos y el texto que quieras tú mismo. Busca en el foro que para un Listbox es lo mismo que un checklistbox.

Para seleccionar 4 nada más... bueno, cuando:
- seleccionas haz un bucle mirando la propiedad Selected[i] si está a true, y cuentas si hay 4 o no
- Si quieres 4 marcados nada más, usa un bucle mirando la propiedad Checked[i]

Incluso tienes la propiedad Items[i].ItemEnabled que lo puedes poner a falso o true, es decir... si el usuario ha hecho 4 selecciones o marcas, inhabilitas (poner en gris) el resto de elementos para obligarle a desmarcar o deseleccionar un item antes de activar otro.

Para saber cuando a deseleccionado un item es igual que cuando selecciona, haz un bucle recorriendo todos los elementos y preguntando si está selecionado o no.

Saludos

darkphantom
01-03-2007, 03:32:15
bueno antes ke nada, muchas gracias a todos, y perdon por la falta de informacion o la mala explicacion, es ke me he hecho bolas yo mismo y no sabia komo explicar.

y comenzando,
1.- si, tienen razon es MARCAR o CHEKEAR o no se, en lugar de seleccionar.......

2.- en cuestion de las preguntas variadas, pues komo eran del mismo componente por eso krei ke un solo tema estaba bien, sorry.........

3.- lepe, no te preocupes si suenas a mal humor, pero tienes razon, eso se hace en la otra opcion, y krei ke era diferente.

tratare de ver todas estas opciones y les komento ke paso, si pude resolver el problema o no, :) gracias y perdon por las molestias. y por cierto, solo puse CHECKLIST porke no hay otro componente con nombre parecido.....por eso no puse CHECKLISTBOX, pero korrijo, es un CHECKLISTBOX, :) y uso Delphi 7.

joHn je@N
01-03-2007, 08:40:39
Creo que estan haciendo una tormenta en un vaso de agua. jejejeje
Porque no veo la complicación.(sera que a lo mejor no he entendido bien) pero, lo mas simple que se me ocurre es una variable que vaya de 1 a 4 y veceversa dependiendo el caso en el que se seleccione (check = true, Inc(variable)) o deseleccione (check = false, Dec(variable)). y para ver cuantos tienes seleccionados pues
puedes ver el valor de la variable o con un ciclo como ya lo han dicho antes.


var seleccionados : Byte;//privada o publica segun el caso y le pones valor de 0 en donde se necesite
//insertas un TBitBtn, un Label y un CheckListBox

procedure TForm1.BitBtn1Click(Sender: TObject);
begin //en este codigo se le agregan los items que desees al CheckListBox con nombre ckbox
ckbox.AddItem('item ' + IntToStr(ckbox.Count + 1), self);
Label1.Caption := 'Has agregado ' + 'item ' + IntToStr(ckbox.Count);
end;

procedure TForm1.ckboxClickCheck(Sender: TObject);
begin
if ckbox.Checked [ckbox.ItemIndex] then ///aqui te dice cual seleccionas y cual no
begin
if seleccionados < 4 then
Inc (seleccionados)
else
ckbox.Checked [ckbox.ItemIndex] := False;
Label1.Caption := 'Seleccionado: ' + ckbox.Items.Strings [ckbox.ItemIndex];
end
else
begin
Dec (seleccionados);
Label1.Caption := 'Deseleccionado: ' + ckbox.Items.Strings [ckbox.ItemIndex];
end;
end;


Checa bien los códigos. creo que ahi esta la respuesta que buscas.

SALUDOS

Lepe
01-03-2007, 11:45:04
Creo que estan haciendo una tormenta en un vaso de agua. jejejeje
Porque no veo la complicación.

No, si complicación no tiene ninguna, pero sin saber si es marcar, seleccionar o inhabilitar items es dificil contestar, además cada una de las cosas tiene su solución. Sabiendo de antemano lo que quiere hacer es fácil dar la solución :p.


Saludos de buen rollo :cool:

joHn je@N
02-03-2007, 10:40:19
Totalmente de acuerdo.
No hay más que decir. Para hacer algo, necesitas saber que es!!!.

SALUDOS