Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 21
Chente(rMan) Va por buen camino
Red face

Creo que de esa manera no funciona , estamos hablando de 30 cb's, por eso quería optimizarlo.


Gracias.
Responder Con Cita
  #2  
Antiguo 24-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que hay un problema de diseño en tu aplicación, porque, verás, el tema tratado en este Hilo es algo muy particular, se trata de inhabilitar el evento "OnClick" de un "TCheckBox" de forma que se pueda cambiar programáticamente la propiedad "Checked" del mismo, sin que se dispare el evento "OnClick".

Pero, de ahí, a hacer lo propio con 30 "TCheckBox"... ¿realmente te hace falta? ¿No bastaría con habilitarlos/deshabilitarlos mediante su propiedad "Enabled"? Tú mismo dices lo siguiente:

Cita:
Empezado por Chente(rMan)
(...) tengo 30 CheckBox, si los deshabilito de un jalon y les cambio sus propiedades de checked (...)
Pues bien, para habilitarlos/deshabilitarlos basta con recorrer los componentes y dar el valor que corresponda a su propiedad "Enabled". Pero si ya los deshabilitaste, ¿qué sentido tiene quitarles el método asociado a su evento "OnClick"? ¡Si el usuario no podrá hacer uso de los mismos!

En fin, creo que lo tratado en este Hilo no tiene que ver con lo que precisas hacer tú en tu programa, porque, de ser así, podrías hacerlo sin problemas. Así pues, creo que deberías reconsiderar el diseño de tu aplicación, dicho mal, pero pronto.

Por otro lado lo que dice Crandel es correcto, es decir, lo que te propone es que asignes un método capaz de tratar con el evento "OnClick" de los "TCheckBox", pues de otro modo no funcionará el asunto como se espera: probablemente ni compile tu programa.

Si tú dices que eso no es posible, porque en tu caso son 30 los "TCheckBox" a utilizar... piensa que servir, lo que se dice servir, sirve: no hay ningún problema en que un método esté asociado a los eventos que te sean menester y luego en el mismo discriminar qué hay que hacer en función de quién sea el objeto que disparara el evento, que a su vez ejecutó el método en cuestión.

En fin. No me enrollo más. Si das algún dato sobre lo que pretendes hacer tal vez se te pueda echar una mano, pero, creo que has pensado que es algo bueno hacer lo que se ha comentado en este Hilo y has decidido hacerlo en tu programa, sin contar que lo "bueno" también es algo particular, que, probablemente, no sea adaptable así sin más a tu aplicación.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 24-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 21
Chente(rMan) Va por buen camino
Tienes razón, creo que no me explique bien, pero como el titulo del post decia Deshabilitar y habilitar el onclick de un CheckBox, asumi que se entería , ahi estuvo mi error, "mia culpa" , ok. lo interare otra vez, tengo 30 ChekBox:

CheckBox1
.
.
CheckBox30

cada uno de ellos tiene codigo diferente en su evento onclick.

Cuando yo hago una busqueda sobre uno de mis reportes, la propiedad checked de estos CheckBox debe cambiar segun lo criterios que defino en mi busqueda, entonces, ya que tengo los resultados de mis busquedas, me preparo a cambiar la propiedad checked de los cb's, para ello, pongo a todos en false a su propiedad checked.

Código Delphi [-]
procedure TfrmForma.LimpiarCheckBox;
var Check: TcheckBox;
     I: Integer;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check := TCheckBox(Components[i]);
        Check.Checked := False;
      end;
end;

Con esto se dispara el evento OnClick de todos los cb's. Para ello necesito deshabilitar el onclick de estos. por lo tanto hago esto.

Código Delphi [-]
procedure TfrmForma.LimpiarCheckBox;
var Check: TcheckBox;
     I: Integer;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check := TCheckBox(Components[i]);
        Check.OnClick := nil;
        Check.Checked := False;
      end;
end;

Con esto logro que no se ejecute el OnClick, pero tengo entendido que debo de copiar el evento, como le puedo hacer para no tener que declarar 30 variables, uno para cada CheckBox.

Código Delphi [-]
procedure TfrmForma.LimpiarCheckBox;
var Check: TcheckBox;
     I: Integer;
     copiaEvento: TNotifyEvent;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check := TCheckBox(Components[i]);
        copiaEvento := Check.OnClick  //aqui es donde no se como...
        Check.OnClick := nil;
        Check.Checked := False;
      end;
end;

para que despues de todas las validaciones que le hago al programa pueda voler a asignarle su evento a cada uno de ellos, algo asi.

Código Delphi [-]
procedure TfrmForma.LimpiarCheckBox;
var Check: TcheckBox;
     I: Integer;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check := TCheckBox(Components[i]);
        Check.OnClick := copiaEvento   //y aqui regresarle su evento.
      end;
end;


Espero que me puedan ayudar y gracias por contestar.


Saludos.

Vicente López.
Responder Con Cita
  #4  
Antiguo 24-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
Aclaraste un poco mas pero no tanto,

queres ejecutar el mismo evento OnClick para todos los checkBox's o queres uno para cada uno?
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 24-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 21
Chente(rMan) Va por buen camino
Uno para cada uno.

Cada CheckBox tiene su evento onclick, entonces tendria que grabar cada evento en una variable diferente para después regresarlelos.

ejemplo:

Código Delphi [-]
var Check: TcheckBox;
     I: Integer;
     copiaEvento1, copiaEvento2 .....  copiaEvento30: TNotifyEvent;
begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check := TCheckBox(Components[i]);
        copiaEvento1 := Check.OnClick  //aqui es donde no se como...
//      copiaEvento {como irle cambiando los numeros} := Check.OnClick  
        Check.OnClick := nil;
        Check.Checked := False;
      end;


y de regreso pues lo mismo.

Saludos.

Vicente López.
Responder Con Cita
  #6  
Antiguo 24-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Código Delphi [-]
TForm1 = class(Tform)
private
  Copias : array [1..30] of TNotifyEvent;

...
end;

var Check:Tcheckbox;
     I: Integer;
     contador:integer;
begin
  contador := 0;
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
      begin
        Check:=  TCheckbox(Components[i]);
        inc(contador);
        copias[contador] :=  check.Onclick;

        Check.OnClick := nil;
        Check.Checked := False;
      end;

al regresar los eventos funciona exactamente igual, siempre y cuando no agregues Checkboxes en tiempo de ejecución entre un guardado y una restauración.

Para restaurarlo, es ese mismo bucle pero usando:

check.Onclick := copias[contador]
y eliminando las 2 lineas siguientes.

Un saludo
Responder Con Cita
  #7  
Antiguo 24-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 21
Chente(rMan) Va por buen camino
Thumbs up

Genial Lepe, un arreglo, lo intentare y te aviso.


Editado: Listo, esta funcionando a la perfeción. Gracias a todos...



Saludos.

Vicente López.

Última edición por Chente(rMan) fecha: 24-08-2005 a las 21:03:23.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 19:26:28.


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