• Martes 16 de Abril de 2024, 23:42

Autor Tema:  Cambiar Propiedad De Varios Componentes  (Leído 1729 veces)

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Cambiar Propiedad De Varios Componentes
« en: Miércoles 5 de Diciembre de 2007, 15:43 »
0
Buenas

  El caso es que tengo varios Componentes del mismo tipo a los que he denominado de la forma:

  TComponent1
  TComponent2
  TComponent3
  .......
  TComponent40

  Segun la eleccion del usuario se ejecuta un metodo "CambiarCaption" en la que  se llama a un procedimiento propio del Componente  (la mima llamada para cada componente)


  CambiarCaption()
  {
  TComponent1->Procedimiento();
  TComponent2->Procedimiento();
  TComponent3->Procedimiento();
     .............................
  TComponent40->Procedimiento();

   }
 
  Mi pregunta es la siguiente: Al ser el procedimiento a ejecutar igual para todos los
Componentes seria posible Evitar la tediosa operacion de ir enumerando uno a uno todos los componentes con su respectiva llamada y hacerlo de una manera mas comoda


Gracias

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Cambiar Propiedad De Varios Componentes
« Respuesta #1 en: Miércoles 5 de Diciembre de 2007, 18:09 »
0
Supongo que puedes recorrer todos los componentes con un ciclo for y cambiarles lo que deseas, puedes tomar el siguiente ejemplo para inspirarte, es para limpiar todos los Edits de un Form

Código: Text
  1.  
  2. for (int i=0;i<ComponentCount;i++)
  3.    {
  4.           if(Components[i]->InheritsFrom(__classid(TCustomEdit)))
  5.                ((TCustomEdit*)Components[i])->Clear();
  6.  
  7.    }
  8.  
  9.  

Espero pueda servirte. Saludos :D
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cambiar Propiedad De Varios Componentes
« Respuesta #2 en: Jueves 6 de Diciembre de 2007, 14:44 »
0
En primer lugar gracias por contestarme.

 He probado tu solucion pero me ha surgido un problema:

 El componente (Componentes: TComponent1, Tcomponent2...) lo he creado yo y el metodo al que llaman el grupo de componentes no es  reconocido cuando  realizo  la llamada,  de la misma forma que si reconoze el metodo clear() del TEdit del ejemplo.


  ((TComponentePropio*)Components)->MetodoPropio();  NO FUNCIONA


Espero Habeme explicado bien

Gracias Otra VEz

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Cambiar Propiedad De Varios Componentes
« Respuesta #3 en: Jueves 6 de Diciembre de 2007, 17:13 »
0
Si, si te he entendido, pero, todos los componentes son iguales? o son distintos? (es decir, todos son Edits (eg)o son Edits, Buttons y mas.)
 :huh:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cambiar Propiedad De Varios Componentes
« Respuesta #4 en: Jueves 6 de Diciembre de 2007, 19:44 »
0
son todos el mismo componente vcl creado por mi (40 iguales)

neg1414

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Cambiar Propiedad De Varios Componentes
« Respuesta #5 en: Jueves 6 de Diciembre de 2007, 19:56 »
0
Hola denuevo

Añado esto para que se entienda mejor

Supongamos que al pulsar un boton accedemos a un metodo donde cambiamos una propiedad del los componentes accediendo a un metodo
que possen

void __fastcall TForm1::Button1Click(TObject *Sender)
{

ModificarPropiedades();
}


void ModificarPropiedades()
{

TComponent1->Modificar();
TComponent2->Modificar();
TComponent3->Modificar();
........................ .....
TComponent40->Modificar();
}