Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2007
Shikanda Shikanda is offline
Miembro
 
Registrado: ago 2007
Posts: 36
Poder: 0
Shikanda Va por buen camino
Cómo hacer para que muchos checkbox usen la misma función?

Hola! No sabía bien si este hilo tenía que ponerlo en POO o en Delphi, así que he decidido ponerlo aquí y si hay que moverlo a otro sitio, pues lo busco

Os cuento, tengo un form con muchisimos checkbox. Por decirlo de alguna forma, hay una columna de checkbox principales y, para cada uno de éstos, tenemos 3 checkbox (secundarios, por decirlo de algún modo). Lo que quiero es que estos checkbox secundarios estén enabled false mientras que los principales no están marcados. Una vez que están checked:=true entonces pasan sus correspondientes checkbox secundarios a estar habilitados.

Pensaba hacerlo todo desde una función sencilla, que recoja el objeto que la llama y a partir de ahi, que habilite o deshabilite según sea el caso. El problema es que no sé muy bien cómo hacerlo sin nombre explícitamente a todos los objetos. Si un checkbox principal se llama CBHola, sus checkbox secundarios se llaman CB1Hola, CB2Hola y CB3Hola. El problema es que no puedo poner algo en plan Sender.Name para trabajar con la cadena.

No se si me he explicado bien. Me habeis entendido? Podríais echarme una mano??? Muchas gracias a todos!
Responder Con Cita
  #2  
Antiguo 03-09-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Lo que hago yo es relacionarlos por la propiedad Tag, por ejemplo los checkboxes de la primera columna llevaría un tag de 0 a 19, los de la segunda de 20 a 39. luego en el eventon OnClick lo utilizo un código como este:

Código Delphi [-]
Procedure Form1.CheckOnClick(Sender:TOnject);
var
I : Integer;
Begin

For i := 0 to Self.ComponentCount - 1) Do
Begin
If (Self.Components[i].ClassType = TCheckBox) and ((TCheckBox(Self.Components[i]).Tag - 20) = TCheckBox(Sender).Tag) Then
TCheckBox(Self.Components[i].Enabled := TCheckBox(Sender).Checked;
end;

end;

Espero te sirva el ejemplo. Saludos
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 03-09-2007
Shikanda Shikanda is offline
Miembro
 
Registrado: ago 2007
Posts: 36
Poder: 0
Shikanda Va por buen camino
Muchas gracias!!

Muchísimas gracias, D&W, tu función era perfecta y he podido resumir en 2 lineas lo que quería hacer en.... demasiadas más. Me daba un pequeño problema porque no eran checkbox propiamente, sino que al trabajar con bases de datos recibian otro nombre... detalles, en definitiva.

Muchas gracias!
Responder Con Cita
  #4  
Antiguo 12-09-2007
Shikanda Shikanda is offline
Miembro
 
Registrado: ago 2007
Posts: 36
Poder: 0
Shikanda Va por buen camino
Siguiendo con checkbox...

A propósito, y siguiendo con los checkbox. Resulta que de este mismo pelotón de checkbox quiero recoger el valor de si están marcados o no y parece que sólo guarda el valor de los checkbox que he "clickado". Vamos, que si están marcados me guarda el 1 y si los marco y desmarco, también me guarda el 0, pero si no los toco, los deja a valor nulo. ¿Cómo recojo ese cero?
Responder Con Cita
  #5  
Antiguo 12-09-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
porq no muestras como lo haces ahorita y luego podemos sugerirte los cambios
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #6  
Antiguo 12-09-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Los CheckBox's son normales o asociados a BD, es decir DBCheckBox ?

Si son DBCheckBox y el valor del campo asociado es Null, porque al crear registro no hayas inicializado ese valor, entonces el DBCheckBox no muestra nada, y hasta que no haces Click una vez sobre el, no te cambia el valor de la Base de Datos.

La solución es que al crear el registro, inicialices con un valor determinado el campo asociado al DBCheckBox (bien sea booleano u otro valor tal como 0 y 1).

Espero haberte podido aclarar algo.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #7  
Antiguo 12-09-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Asigna un valor a todos los campos

Lo que hago yo en estos casos es luego de ingresar un registro poner todos los campos booleanos a false.
Código Delphi [-]
miTabla.Insert;
For I := 0 to (miTabla.Fields.Count - 1) do
Begin
if (miTabla.Fields[i].DataType = ftBoolean) Then  //* más abajo te doy un comentario hacerca de esta línea.
miTabla.Fields[i].AsBoolean := False;
end;
....

//* En este caso el procedimiento se ejecturará solo si el campo es booleano, dependiendo de tu caso cambia el valor de ftBoolean. Revisa el tipo TFieldType para ver los valores posibles.

En el mejor de los caso, sería mejor que utilizaras valores por defecto, si es que tu motor de datos los soporta.

Saludos.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 12-09-2007
Shikanda Shikanda is offline
Miembro
 
Registrado: ago 2007
Posts: 36
Poder: 0
Shikanda Va por buen camino
Gracias, chicos. Efectivamente eran DBCheckBox asociados a una tabla que no inicializaba los campos a ningún valor, por eso cogía null. Ya les puse un valor por defecto al inicializar y ahora va perfecto.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer una funcion DESHACER newbery Gráficos 8 13-01-2009 22:17:26
Problemas con generadores en relacion Muchos-a-Muchos Hagen Firebird e Interbase 3 30-10-2006 16:47:51
Necesito un favor..Quien puede hacer una funcion para Base Firebird pani_alex Firebird e Interbase 8 12-04-2006 14:26:25
Como Utilizar La Funcion Desc Para Hacerla Parte De Un Query JOTAAB Oracle 2 06-01-2006 18:41:25
Un sistema para muchos usuarios Gabriel2 Varios 2 14-07-2005 09:49:49


La franja horaria es GMT +2. Ahora son las 02:40:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi