Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Uso de la función FindComponent (https://www.clubdelphi.com/foros/showthread.php?t=22594)

jessie 21-06-2005 04:18:14

Uso de la función FindComponent
 
hola a todos, la verdad es que me urge su ayuda para poder saber como se usa la función findcomponent, lo que pasa es que estoy creando una aplicación en la cual creo objetos dinámicamente, creo Edits y Labels, entonces ahora quiero apropiarme de esos objetos para poder usarlos y liberarlos despues de su uso, he visto que se hace con esta función, sin embargo lo he probado y no me resulta... ojalá pudiera ayudarme alguien por favor, es que me interesa muchisimo, gracias por su ayuda y espero ansiosamente su respuesta....

roman 21-06-2005 05:05:45

Sería útil que dijeras algo más específico que "no me resulta". Por otra parte creo que usar FindComponent es innecesario. Si creas una componente en código que luego quieres liberar simplemente guarda una referencia a la componente creada y úsala para liberarla:

Código Delphi [-]
Edit := TEdit.Create(...);

...

// más adelante

Edit.Free;

// Saludos

Neftali [Germán.Estévez] 21-06-2005 09:37:01

Supongo que te refieres a que creas varios componentes utilizando la misma referencia (si no así Roman tiene razón...):

Código Delphi [-]
 var 
   Edit:tEdit;
 begin
 ...
 for i := 0 to 10 do begin
    Edit := TEdit.Create(...);
  ...
  Edit.Name := '???';

end;

Para obtener componentes con FindComponent necesitas tener el nombre y como comprobación adicional utilizar el operador IS. Algo así podría ser un ejemplo:

Código Delphi [-]
 var 
   Edit:tEdit;
   i:Integer;
   comp:TComponent;
 begin
 ...
 for i := 0 to 10 do begin
   Name := 'Edit' + IntToStr(i);  // para ir cambiando el nombre
   // Buscamos el componente
   comp := FindComponent(Name);
   // Lo ha encontrado?
   if Assigned(comp) then begin
     // Asegurarnos de que es un Edit (tal vez no haría falta.)
     if (comp is TEdit) then begin
       TEdit(comp).Text := 'Encontrado';
       TEdit(comp).Color := clGray;      
     end;
   end;
 end;
 

NOTA: En la ayuda de Delphi tienes algun eemplo más del FindComponent:
NOTA: Te he puesto el código de memoria (no lo he compilado), así que tal vez tenga algun error de sintaxis.:(

memoferprof 27-02-2013 18:26:49

Cita:

Empezado por Neftali (Mensaje 93479)
Supongo que te refieres a que creas varios componentes utilizando la misma referencia (si no así Roman tiene razón...):

Código Delphi [-] var Edit:tEdit; begin ... for i := 0 to 10 do begin Edit := TEdit.Create(...); ... Edit.Name := '???'; end;


Para obtener componentes con FindComponent necesitas tener el nombre y como comprobación adicional utilizar el operador IS. Algo así podría ser un ejemplo:

Código Delphi [-] var Edit:tEdit; i:Integer; comp:TComponent; begin ... for i := 0 to 10 do begin Name := 'Edit' + IntToStr(i); // para ir cambiando el nombre // Buscamos el componente comp := FindComponent(Name); // Lo ha encontrado? if Assigned(comp) then begin // Asegurarnos de que es un Edit (tal vez no haría falta.) if (comp is TEdit) then begin TEdit(comp).Text := 'Encontrado'; TEdit(comp).Color := clGray; end; end; end;


NOTA: En la ayuda de Delphi tienes algun eemplo más del FindComponent:
NOTA: Te he puesto el código de memoria (no lo he compilado), así que tal vez tenga algun error de sintaxis.:(


Saludos Deftali
Preguntando acerca de el FindComponent, este mismo puede encontrar o reconocer componentes de otro Form?
Osea algo asi como
Código Delphi [-]
with TUniPanel(FindComponent('Main.MainForm.PDomi1')) do
      begin
        Left := PDomi.Left;
        Top :=  PDomi.Top;
        width := PDomi.Width;
        Height:= PDomi.Height;
        Color := Random(MaxInt) and $FFFFFF;
        Visible := True;
        Caption := Main.MainForm.DBEditRolGuia.Text;
      end;
Es que en mi caso quiero heredar esos valores de ancho, alto, izquierda, arriba de PDomi a otro Panel de otro Form.
Se que no lo estoy haciendo bien, porque al ejecutar eso me devuelve errores, no se podrias orientarme.
Gracias.

ecfisa 27-02-2013 18:54:11

Cita:

Empezado por memoferprof (Mensaje 455685)
Saludos Deftali
... este mismo puede encontrar o reconocer componentes de otro Form?

Hola memoferprof.

Por supuesto que si. Claro que debes especificar el form.

Un ejemplo bien simple:
Código Delphi [-]
...
uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ...
  Caption:= TEdit(Form2.FindComponent('Edit1')).Text
end;
...

Saludos.

memoferprof 27-02-2013 19:32:46

Cita:

Empezado por ecfisa (Mensaje 455687)
Hola memoferprof.

Por supuesto que si. Claro que debes especificar el form.

Un ejemplo bien simple:
Código Delphi [-]... uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin ... Caption:= TEdit(Form2.FindComponent('Edit1')).Text end; ...


Saludos.

Wow!!
Gracias eficsa
Sin probarlo, estoy seguro que esa es mi solucion al problema que tengo, no lo habia pensado de esa manera jeje o tal vez no alcanzaba mi mente a entenderlo asi o simplemente no sabia que se podia asi. Pero gracias, gracias.

ecfisa 27-02-2013 19:49:37

Hola memoferprof.

Como dato adicional, en el código anterior (msg #5) donde están los "...", es conveniente que verifiques que el componente contenedor (form) haya sido creado para evitar una excepción:
Código Delphi [-]
  ...
  if Assigned(Form2) then  // verificar
    Caption:= TEdit(Form2.FindComponent('Edit1')).Text;
  ...

Saludos. :)

memoferprof 27-02-2013 19:58:50

Cita:

Empezado por ecfisa (Mensaje 455692)
Hola memoferprof.

Como dato adicional, en el código anterior (msg #5) donde están los "...", es conveniente que verifiques que el componente contenedor (form) haya sido creado para evitar una excepción:
Código Delphi [-] ... if Assigned(Form2) then // verificar Caption:= TEdit(Form2.FindComponent('Edit1')).Text; ...


Saludos. :)

Lo hare de esa manera, solo quiero agregar mi comentario para explicar mi entendimiento:
estaba haciendo mal uso de la funcion FindComponent, lo que yo hacia era decirle a la funcion FindComponent que fuera a
Código Delphi [-]
with TUniPanel(FindComponent('Main.MainForm.PDomi1')) do
y por lo que me has enseñado, lo que debo hacer es ir a la MainForm y decirle que use la funcion FindComponent para que ahi ya busque el componente que deseo, osea que algo asi:
Código Delphi [-]
with TUniPanel(Main.MainForm.FindComponent('PDomi1')) do
Gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 20:34:49.

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