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 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 end;
end;
Espero que me puedan ayudar y gracias por contestar.
Saludos.
Vicente López.