Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   cambiar la propiedad checked de varios CheckBox (https://www.clubdelphi.com/foros/showthread.php?t=83675)

fuego149 13-07-2013 08:36:30

cambiar la propiedad checked de varios CheckBox
 
Buenas.
Mi problema es, que nesecito colocar en false la propiedad Checked de varios (10) CheckBox que tengo en el formulario.
Gracias al buscador consegui 2 codigos es delphi que en teoria hacen lo que yo quiero pero al tratar de traducirlo a C++Builder6.0 no hace nada
Estos son los codigos que encontre
1)cortesia de: [Bicho]


Código Delphi [-]
Var
  i:Integer;
begin
  With Form do
  For i := 0 to ComponentCount - 1 do
    If Components[i].Tag in Tags then
      If Components[i] is TEdit then TEdit(Components[i]).Clear
      Else
        If Components[i] is TStaticText then TStaticText(Components[i]).Caption := ''
        Else
          If Components[i] is TComboBox then TComboBox(Components[i]).ItemIndex := -1
          Else
            If Components[i] is TListView then TListView(Components[i]).Items.Clear
            Else
              If Components[i] is TMaskEdit then TMaskEdit(Components[i]).Clear
              Else
                If Components[i] is TMemo then TMemo(Components[i]).Lines.Clear
                ELSE
                  if Components[i] is TCheckBox then TCheckBox(Components[i]).Checked:=false;


2)cortesia de:Chente(rMan)

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;
     Check.Enabled := True;
     end
end;

En mi Form tengo esto

Código:

int I;
TCheckBox *Check;

for (I = 0;I<=Form1->ComponentCount - 1;I++)
  {
  if (Form1->Components[i]->ClassNameIs("TCheckBox"))
    {
  Check=TCheckBox(Form1->Components[i]);  //aqui me sale el siguiente error
//[C++ Error] Unit1.cpp(31): E2034 Cannot convert 'TCheckBox' to 'TCheckBox *'
  Check->Checked=false;
    }
  }


Cambie el codigo por este
Código:

int I;

for (I = 0;I<=Form1->ComponentCount - 1;I++)
  {
  if (Form1->Components[i]->ClassNameIs("TCheckBox"))
    {
    TCheckBox(Form1->Components[i]).Checked=false;
    }
  }

Aqui el programa se ejecuta pero los CheckBox siguen igual

Alguien ve el error que estoy cometiendo al realizar la traduccion de lenguaje?
porque ya no se que hacer

ecfisa 14-07-2013 00:21:43

Hola fuego149, bienvenido a Club Delphi :).

.h
Código:

...
class TForm1 : public TForm
{
...
private:       
  void __fastcall CheckBoxOnOff(const bool Checkup);
...
};
...

.cpp
Código:

...
void __fastcall TForm1:: CheckBoxOnOff(const bool Checkup)
{
  for(int i = 0; i < ComponentCount; i++)
    if (Components[i]->ClassNameIs("TCheckBox"))
      ((TCheckBox*)(Components[i]))->Checked = Checkup;
}

Llamada ejemplo:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  CheckBoxOnOff(false); // (o true )
}

Saludos :)

fuego149 14-07-2013 07:53:10

Muchas gracias por las correcciones ecfisa
Tu codigo me ha dado ideas para crear un procedimiento que limpie los componentes de una forma mas eficas y con menos lineas de codigo de las que tendria que usar si llamo a cada componente individualmente


La franja horaria es GMT +2. Ahora son las 17:36:30.

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