PDA

Ver la Versión Completa : acceder a todos pero modificar algunos...


Alfredo
21-12-2004, 16:49:09
Hola a todos, estoy teniendo problemas para modificar ciertas propiedades en algunos com ponentes.... Me explico con el objetivo:

En un formulario con varios controles (Memos, edits y botones) deseo que al pulsar el boton 'Cancelar' se limpien los Tedits; Son varios con nombres expecificos.. edNombre; edEtc... (seria mas sido mas facil si no hubiera puesto nombre)
Estoy tratando con esta rutina:


label1.caption:='';
label2.caption:='';
memoDatos1.Lines.Clear;
memoDatos2.Lines.Clear;

for i:= 0 to form2.ComponentCount-1 do
c:= (form2.Components[i].Name) as string;
if Form2.Components[i] is tEdit then
begin
(FindComponent((form2.Components[1].Name)) as tedit).Text;
c.Text:='';
end;
end;


Pero compila. Me a presentado varios errores: en principio con conversiones pero lo ultimo es que ¿¡que no tengo definido FindComponent!?.. No entiendo muy bien lo que pasa quiza estoy aplicando mal el procedimiento o la lógica, ... Quiza me puedan dar un empujon.....

Un millon :D

andres1569
21-12-2004, 17:09:42
Hola, no entiendo algunas asignaciones, como esa que haces de:

c:= (form2.Components[i].Name) as string;

¿"c" es una vraible tipo string o tipo TComponent o tipo TEdit ...? Como luego haces c.Text := ''; :confused:

Tampoco entiendo que luego busques de nuevo, usando FindComponent, un componente al que ya estás accediendo mediante el array Components.

Para no extenderme más prueba a ver si es esto lo que andas buscando:


for i:= 0 to form2.ComponentCount-1 do
if Form2.Components[i] is TEdit then
TEdit(Form2.Components[i]).Text := '';


Saludos

Ohcan
21-12-2004, 17:29:09
Hola Alfredo

Yo hago algo así, parecido, pero en TTabSheet.
Te pongo un ejemplo:


procedure Limpiar;
var
I:Integer;
Control:TControl;
begin
for I := 0 to From1.ControlCount-1 do //Uso ControlCount no ComponentCount
begin
Control:= PaginaActual.Controls[I];
if Control is TEdit then TEdit(Control).Text := '';
end;
end;


Simplemente nos recorremos el Form (en este caso) y cuando encontramos un TEdit (o lo que sea), lo "limpiamos"... ¡Ah! si necesitas saber el nombre: TControl(Control).Name

Espero que te sirva...

Salu2

Alfredo
21-12-2004, 17:39:43
WUW... :D

Por algo asi comence pero se me fue poniendo escamoso.....
y me fui enredando cada vez mas en el proceso... je je

Una vez mas Gracias Andres .... funciona a la perfección con todos los controles del form, incluso con los que estan en paneles diferentes....

Alfredo
21-12-2004, 17:46:23
Gracias Ohcan, esta fino, te lo agradezco tambien.... solo que cuando hice las primeras pruebas use Controls en vez de components y me modificaba el text pero no de todos los paneles¿?

Muy agradecido de verdad....

Ohcan
21-12-2004, 17:55:39
Bueno... no sabía que tenías paneles... pero eso es sencillo...

puedes usar recursividad....


procedure Limpiar(Padre:TObject);
begin
(...)
if Control is TPanel then Limpiar(Control);
(...)
end;


o algo por el estilo (que estoy escribiendo de memoria... :D