PDA

Ver la Versión Completa : Ayuda con findcomponent!


b3nshi
15-06-2007, 05:18:02
Les cuento mi problema...

tengo en un formulario los siguintes componentes:
label1, label2, edit1, edit2, edit3, memo1, memo2, button1.

En el onclick del button1 digo q tome el texto del edit3 (el texto q se debe ingresar es el nombre de alguno de los componentes existentes, por ejemplo: label1) y luego a ese componente le cambie la posicion top a 0.

Intente hacerlo de la siguiente manera:


...
var
comp: tcomponent;

begin
comp := findcomponent(edit3.text);
comp.top := 0;

{y me sale un error, ya q la propiedad top, no aparece en la
lista de las posibles del componente}
...


El problema es q si o si tengo q cambiarle la propiedad sin saber a q clase pertenece el componente... y yo se desde antes q la propiedad si la tiene... no se si se entiende... pero si a alguien le ocurre como hacerlo estaria muy agradecido!

Desde ya muchisimas gracias! Suerte! Y espero puedan ayudarme!

roman
15-06-2007, 05:26:38
A ver si algo como esto:


if comp is TControl then
TControl(comp).Top := 0;


// Saludos

b3nshi
15-06-2007, 06:08:20
Muchas Gracias por la respuesta Roman... pero... mmm... veamos...
te explico... lo de recien fue un ejemplo... en realidad lo q estoy queriendo hacer es cambiar varias propiedades en comun q tienen estos objetos, como ser top, left y weight...

Entonces si hago esto, por cada tipo de objeto q se me presente tengo q volver a escribir todas las propiedades... onda algo asi:

if comp is tedit then
begin
with tedit(comp) do
begin
top:=
height:=
left:=
weight:=
end;
end;

if comp is tlabel then
begin
with tlabel(comp) do
begin
top:=
height:=
left:=
weight:=
end;
end;
{y asi con cada tipo de componente solo q estaria repitiendo las propiedades}


y eso es lo q quiero evitar... tener q escribir muchas veces el mismo codigo... y la verdad q no se me ocurre como hacerlo con una subfuncion...
alguna idea?

desde ya muchas gracias por contestar y tan rapido!

roman
15-06-2007, 06:19:19
Yo no digo que hagas un condicional para cada caso posible, sólo con TControl que es el ancestro de todos los demás y que tiene ya esas propiedades


comp := findcomponent(edit3.text);

if comp is TControl then
begin
TControl(comp).top := ...
TControl(comp).height := ...
TControl(comp).left := ...
TControl(comp).width := ...
end;


// Saludos

b3nshi
15-06-2007, 06:47:06
Mira vos! Me habia olvidado de ese detalle... falta de practica!

Muchisimas Gracias roman... me solucionaste el problema y me simplificaste el codigo! jaja en serio muchisimas gracias!

Hugorr
02-08-2007, 21:11:22
Tengo que hacer un pequeño ajuste en vba, el problema es que necesitaba una funcion como el findComponent de delphi. No se si habra alguna y si la hay podrian decirme cual es. He buscado inf. pero nada solo encuentro la funcion de delphi.

Muchas gracias.