Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con componentes en form (https://www.clubdelphi.com/foros/showthread.php?t=35542)

Vinicio 13-09-2006 19:11:19

Ayuda con componentes en form
 
Hola amigos necesito saber en un momento dado en tiempo de ejecucion cuales componentes tiene un form de delphi en ese momento, es decir
Edit1 Edit2 Label1 Label2, osea la lista de todos los componentes pero en tiempo de ejecucion...alguno tiene alguna idea? :S

seoane 13-09-2006 19:13:54

Cada formulario tiene la propiedad Components que es una lista de los componentes que contiene.

Vinicio 13-09-2006 19:30:29

jeje gracias amigo, pero por ejemplo si kiero desplegar la lista de componentes en un edit como le hago?
Intento hacer esto pero la verdad es k no se ni k onda..:S
Edit1.Text:= Form1.Components[0];

Me pide un integer, pero en realidad no se para k o por ke, me podrias explikar :S

roman 13-09-2006 19:34:25

Text es un string así que necesitas asignarle, no la componente sino el nombre de la componente:

Código Delphi [-]
Edit1.Text:= Components[0].Name;

// Saludos

Vinicio 13-09-2006 19:40:36

Muchisimas Gracias a los 2, eh solucionado lo k keria :)

Werther 13-09-2006 21:10:22

Mmmm, andaba con un problema similar, y la referencia me ayudó mucho para resolver algunas partes pero me viene la duda de como obtener ahora algunas propiedades del componente lo localizado, por decir

for i:=0 to (form1.ComponentCount-1) do
begin
edit1.Text := form1.Components[i].Name;
edit2.Text:=form1.Components[i].ClassName;
end;

uso ese Ciclo para obtener el nombre y clase del componente, pero lo que realmente necesito es saber sus valores de Top/Left/Visible, si pudieran auxiliarme...

roman 13-09-2006 21:22:29

Lo que pasa es que TComponent es una clase muy general y algunas propiedades sólo existen en clases descendientes. Tendrías que hacer un moldeo a una clase más afín, por ejemplo:

Código Delphi [-]
for i:=0 to (ComponentCount-1) do
begin
  if Components[i] is TControl then
    with TControl(Components[i]) do
    begin
      {
        Aquí ya puedes acceder a las propiedades específicas de TControl
        y sus descendientes, entre las que se cuentan Top, Left, Visible, etc.
      }
    end;
end;

Por cierto, ¿por qué pones form1 en el código anterior? No es una buena práctica que el código de una clase tenga referencias a una variable particular de esa clase.

// Saludos

Werther 13-09-2006 21:30:40

Es que en mi código debo hacer referencia a componentes ubicados en otras forms, en específico de un form de QR para poder volver customizable la ubicación de los componentes en el reporte, y ando buscando de volver dinámica mi función, por eso el form1. olvidé quitarlo, veré con la información que me brindaste, gracias

roman 13-09-2006 21:38:50

¡Ah! Ok. Di por sentado que el código estaba dentro del mismo formulario. Entonces a tu función puedes pasarle como parámetro el formulario deseado:

Código Delphi [-]
procedure HazAlgoConLasComponetesDeUnFormulario(F: TForm);
begin
  for i:=0 to (F.ComponentCount-1) do
  begin
    if F.Components[i] is TControl then
      with TControl(F.Components[i]) do
      begin
        {
          Aquí ya puedes acceder a las propiedades específicas de TControl
          y sus descendientes, entre las que se cuentan Top, Left, Visible, etc.
        }
      end;
  end;
end;

// Saludos


La franja horaria es GMT +2. Ahora son las 18:10:40.

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