Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2005
jessie jessie is offline
Registrado
 
Registrado: abr 2005
Posts: 6
Poder: 0
jessie Va por buen camino
Question 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....
Responder Con Cita
  #2  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 21-06-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 27-02-2013
memoferprof memoferprof is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 20
Poder: 0
memoferprof Va por buen camino
Talking

Cita:
Empezado por Neftali Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 27-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por memoferprof Ver Mensaje
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-02-2013 a las 19:02:12. Razón: ortografía
Responder Con Cita
  #6  
Antiguo 27-02-2013
memoferprof memoferprof is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 20
Poder: 0
memoferprof Va por buen camino
Talking

Cita:
Empezado por ecfisa Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 27-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 27-02-2013
memoferprof memoferprof is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 20
Poder: 0
memoferprof Va por buen camino
Talking

Cita:
Empezado por ecfisa Ver Mensaje
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.

Última edición por memoferprof fecha: 27-02-2013 a las 19:59:57. Razón: Error en un codigo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:31:14.


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
Copyright 1996-2007 Club Delphi