FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Manejar Componetes
Q tal, quisiera saber como puedo mandar llamar un objeto por medio de una variable, lo q pasa es que tengo alrededor de 200 shapes, lo q necesito es llamar de uno por uno para asignarle al color del objeto un valor, lo que quiero es evitar llamar uno por uno, en vez de hacer esto:
Shape1.brush.Color:=clgreen; Shape2.brush.Color:=clgreen; Shape3.brush.Color:=clgreen; y asi hasta llegar a 200 manejar una especie como esta contador:=contador+1; componente:='Shape'+contador; componente.brush.color:=clgreen; pero como declaro que "componente" es un Shape, no se si me entendi. agradeceria respuestas, lo hago asi porq el shape lo meto a un if, si cumple una condicion entonces q cambie de color
__________________
Sergio Esquivel Arredondo T.S.U. Informatica |
#2
|
||||
|
||||
Utilizando FindComponent puedes obtener un componente a partir de su nombre; En la ayuda de Delphi tienes el siguiente ejemplo:
Es casi idéntico al tuyo, simplemente que trabaja con TEdit, y la propiedad que modifica es otra, pero vamos es casi "pastado". Pruébalo y si tienes problemas ya dirás...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Aquí tienes otro ejemplo:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#4
|
||||
|
||||
Recomiendo el método de Marcos ya que FindComponent usa él mismo un ciclo que recorre las componentes hasta encontrar una con el nombre indicado de manera que se estaráa repitiendo el mismo ciclo por cada iteración del ciclo for externo.
Lo único es que (Components[nConta] as TShape).brush.Color:=ClGreen; quedaría un poco mejor así: TShape(Components[nConta]).brush.Color:=ClGreen; ya que el operador as invlucra una llamada implícita al operador is innecesaria ya que se hace previamente. // Saludos |
#5
|
||||
|
||||
Cita:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#6
|
|||
|
|||
muchas gracias, si funciono, solo por cuestiones de programacion tuve que cambiar el nombre del componente, Shape1 es NOMBRE10, shape2 es NOMBRE15, el nombre del componente es lo que quiero manejar, de hecho solo cambia el numero, ese numero es el que quiero enviar a la variable.
Es decir, los nombres del shape se conforma asi: NOM1 (Shape1) NOM5 (Shape2) NOM6 (Shape3) NOM7 (Shape4) por lo cual shape2, no necesariamente es NOM2, es NOM5, como manipulo eso????
__________________
Sergio Esquivel Arredondo T.S.U. Informatica |
#7
|
||||
|
||||
Pues el ejemplo que yo puse y que oportunamente corrigio Román te sirve, porque no estamos tratando con el nombre del componente, que se puede llamar como tu quieras, sino que estamos buscando todos los componentes de una clase en este caso TShape y cada componente de esta clase que encontremos, independientemente de cual sea su nombre le cambiamos el color.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#8
|
||||
|
||||
En el ejemplo de Marcos no requieres conocer el nombre de la componente. No sé cuál sea el problema.
// Saludos |
#9
|
|||
|
|||
ok, disculpen, estoy de acuerdo con ustedes, solo falto mencionarles que no necesariamente tengo que aplicar la propiedad a todos, eso depende si cumple una condicion, es decir:
while comparar < 200 do begin if comparar=condicion then //Comparo si el numero es igual a una condicion TShape(Components[comparar]).brush.Color:=ClGreen; { Si es igual entonces que cambie el shape con el numero de cuerdo a la variable comparar} comparar:=comparar+1; end; O sea que si comparar=58 y cumple con la condicion entonces cambiara un shape, pero y el shape se llama NOM58 que coincidiria con el valor de comparar, un poco revoltoso pero es necesario , es por eso q aclaraba lo del nombre
__________________
Sergio Esquivel Arredondo T.S.U. Informatica |
#10
|
||||
|
||||
Sigo sin ver la relación, si además de recorrer todos los componentes y evaluar los del tipo TShape, le añadimos que cumplan cierta condición, tampoco tiene nada que ver el nombre que tengan en si la cumplen o no.
Antes de hacer el cambio bastará con aplicar un If. If Condicion = True then Lo_Que_sea; Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#11
|
|||
|
|||
ok, intentare realizarlo, gracias por la yuda
__________________
Sergio Esquivel Arredondo T.S.U. Informatica |
#12
|
|||
|
|||
Hola
Cita:
En el ejemplo utilizo la variable AComponent para guardar el valor de form1.Components[nConta], para evitar llamar varias veces la misma propiedad Components[n], manías mías . Saludos
__________________
Guía de Estilo Última edición por andres1569 fecha: 25-11-2004 a las 09:53:59. |
#13
|
||||
|
||||
puedes hacer un array de TShapes al principio para evitar hacer un for i to component.count cada vez que quieras recorrer los shapes.
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa. |
|
|
|