Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   acceder a todos pero modificar algunos... (https://www.clubdelphi.com/foros/showthread.php?t=17053)

Alfredo 21-12-2004 16:49:09

acceder a todos pero modificar algunos...
 
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:

Código:

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:

Código Delphi [-]
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:

Código Delphi [-]
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....

Código Delphi [-]
procedure Limpiar(Padre:TObject);
begin
  (...)
  if Control is TPanel then Limpiar(Control);
  (...)
end;

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


La franja horaria es GMT +2. Ahora son las 11:30:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi