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 13-11-2020
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Lo primero seria saber que clase de objetos estas creando. Sin descienden de TComponent y les asignas un parent o son descendientes de TObject.

Podrias almacenar los objetos en un TObjectList y asi puedes tener acceso a ellos. Bueno depende de la forma que los estes creando.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #2  
Antiguo 14-11-2020
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Hola y gracias por vuestras respuestas.


Los objetos que estoy creando son unos componentes propios que tienen un "TImage" y un "Caption" dentro de un recuadro para poder mostrar botones con imágenes y un texto con colores configurables, etc.


Estuve mirando el comando "FindComponent" pero no me funcionaba, no sé si hay algún uses que no estaba poniendo o cual era el problema pero no pude llegar a utilizarlo. ¿Algún ejemplo tontuno y/o hay que usar algún uses en especial?


Gracias y un saludo

Edito: Ok, ya veo como es la sintaxis. Pruebo y si tengo algún problema ya comento.
Gracias.
__________________
Be water my friend.

Última edición por newtron fecha: 14-11-2020 a las 11:32:18.
Responder Con Cita
  #3  
Antiguo 16-11-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Cómo los creas? ¿Puedes poner ese trozo de código?
Responder Con Cita
  #4  
Antiguo 16-11-2020
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Claro, te lo paso aunque le he dado otra solución porque, como siempre, tengo el tiempo escaso y le estaba dando muchas vueltas a este tema.



Código Delphi [-]
procedure TFormPrincipal.MuestraArticulos(Grupo: String);
var
  Boton: TNTSB2;
  TextoEnIdioma: String;
  Posicion,Aumento: SmallInt;
  TopP,LeftP: SmallInt;
  ImagenBMP: TBitMap;
begin
  TopP:=3;
  LeftP:=3;
  if Debughook=0 then
    Aumento:=2
  else
    Aumento:=1;
  ScrollBox3:=TScrollBox.Create(nil);
  ScrollBox3.Left    := ScrollBox2.Left;
  ScrollBox3.Top     := ScrollBox2.Top;
  ScrollBox3.Height  := ScrollBox2.Height;
  ScrollBox3.Width   := ScrollBox2.Width;
  ScrollBox3.Parent  := FormPrincipal;
  FormMain.EDBQuery1.SQL.Clear;
  FormMain.EDBQuery1.SQL.Add('SELECT FAMILIA,CODIGO,DESCRIPCIO,IDIOMA1 FROM ARTICULOS A LEFT JOIN GRUPART B ON A.CODIGO=B.ARTICULO WHERE A.CODIGO='+QuotedStr(Grupo)+' ORDER BY B.POSICION');
  FormMain.EDBQuery1.ExecSQL;
  while not FormMain.EDBQuery1.Eof do begin
    if DlgPropiedades.Idioma=1 then begin
      TextoEnIdioma:=FormMain.EDBQuery1.FieldByName('DESCRIPCIO').AsString;
    end else if DlgPropiedades.Idioma=2 then begin
      TextoEnIdioma:=FormMain.EDBQuery1.FieldByName('IDIOMA1').AsString;
    end;
    // Creo botones artículos
    Boton:=TNTSB2.Create(nil);
    Boton.Name       := 'A'+FormMain.EdbQuery1.FieldByName('FAMILIA').AsString+FormMain.EdbQuery1.FieldByName('CODIGO').AsSt  ring;
    Boton.Tipo       := tTituloSimple;
    Boton.Caption    := TextoEnIdioma;
    Boton.Color      := clWhite;
    Boton.Parent     := ScrollBox3;
    Boton.Top        := TopP;
    Boton.Left       := LeftP;
    Boton.Width      := Trunc(134*Aumento);
    Boton.Height     := Trunc(162*Aumento);
    Boton.NTValor    := 'A*'+FormMain.EdbQuery1.FieldByName('FAMILIA').AsString+FormMain.EdbQuery1.FieldByName('CODIGO').AsS  tring;
    Boton.OnClick    := FormTomarLlevar.BotonPulsado;
    LeftP:= LeftP + Boton.Width  +3;
    if LeftP> (Boton.Width*2)+20 then begin
      TopP:= TopP + Boton.Height +3;
      LeftP:=3;
    end;
    Posicion:=DlgPropiedades.ListaArticulos.IndexOf(FormMain.EdbQuery1.FieldByName('FAMILIA').AsString+F  ormMain.EdbQuery1.FieldByName('CODIGO').AsString);
    DlgPropiedades.ImageListArticulos.GetBitmap(Posicion,Boton.Glyph);
    FormMain.EDBQuery1.Next;
  end;
  ScrollBox2.Visible := fALSE;
  ScrollBox3.BringToFront;
  PanelLadoD.BringToFront;
end;
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 16-11-2020
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.286
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
Se me ocurre que puede ser por el tema del Owner.
Segun la ayuda componentcount:
Indicates the number of components owned by the component.


Si estás creando los componentes sin Owner, el ComponentCount/Components[i] no los encontrará. Y lo mismo pasará si estás utilizando el ComponentCount/Components[i]sobre un contenedor al que no pertenecen.

Por otro lado yo recomiendo por temas de optimización (y para más seguridad) que en lugar de utilizar FindComponent, crees una lista personal (TList/TStringist/TObjectList/TList<Tcomponent>,...) para almacenar, gestionar, buscar,... los componentes creados en runtime.

ACTUALIZACIÓN:
Ahora que veo el código, se me ocurren 2 opciones:

(1) Crear los componentes con un Owner.
(2) Añadirlos a una lista propia para gestionarlo.
__________________
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
  #6  
Antiguo 16-11-2020
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Germán.


Efectivamente he tirado por la opción de crear una lista para guardar los componentes. De una forma o de otra viene bien conocer el problema por si tengo que "recular" en el manejo de todo esto y volver a la búsqueda de los componentes creados.


Gracias a todos y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 16-11-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Yo te recomiendo que huyas de esto:
Código Delphi [-]
    Boton:=TNTSB2.Create(nil);    // Esto no
    Boton:=TNTSB2.Create(Padre);  // Mejor esto. Padre sería lo que estimes oportuno: tPanel, tForm, Sender...
Te evita un montón de problemas con el manejo de la memoria, con el borrado...
Responder Con Cita
  #8  
Antiguo 16-11-2020
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.286
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
Yo lo he usado muchas veces y por ejemplo, utilizar una TStringList ordenada, con el nombre de los componentes, mejora infinitamente la velocidad (más cuanto mayor sea el número de componentes) ya que la búsqueda en una lista ordenada es dicotómica, en lugar de secuencial.
__________________
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
  #9  
Antiguo 16-11-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
También puedes asignar a la propiedad "Tag" del botón el código del artículo, así cuando se pulse un botón no hay que buscar nada, solamente tomar su tag y ya tienes el código del artículo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Acceder a componentes creados en ejecución bulc Varios 5 01-03-2019 16:44:17
Error TStringList creados en tiempo de ejecución subzero Varios 14 26-01-2008 13:58:05
Destruir Qrlabels creados en tiempo de ejecucion Ade Impresión 6 08-10-2006 19:46:28
Eventos en componentes creados en tiempo de ejecucion joumont OOP 3 27-12-2005 14:48:23
Objetos creados en tiempo de ejecución Scocc OOP 4 13-06-2003 20:55:29


La franja horaria es GMT +2. Ahora son las 15:34:08.


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