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 16-11-2020
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.

Y, si usas la clase TStringList como te sugiere Neftali, mediante el método AddObject puedes almacenar tanto el nombre del objeto como el objeto mismo.
Código Delphi [-]
...
   Image := TImage.Create;
   //...
   Image.Name := Format('Image%d', [i]);
   Lista.AddObject(Image.Name, TObject(Image));
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 16-11-2020
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Coñe, me apunto lo del TStringList, que no me acordaba yo que podía usarse como contenedor de objetos. La de dolores que me va a ahorrar (cuando me acuerde de usarlo).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
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
Cita:
Empezado por ecfisa Ver Mensaje
Y, si usas la clase TStringList como te sugiere Neftali, mediante el método AddObject puedes almacenar tanto el nombre del objeto como el objeto mismo.
+1

TStringList, esa gran desconocida...
Nosotros en su día hicimos pruebas de velocidad con otras listas tipo TDictionary e implemenaciones de las listas hash y TStringList resultó en muchos casos más rápida que estas.
__________________
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 24-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
Buenas compañeros.


De nuevo con este tema. Una vez medio resuelto el tema almacenando las imágenes en "Imagelist" veo que, o no sé o las imágenes no puedo guardarlas con una resolución mayor de X con lo que al mostrarlas grandes se ven muuuuuuuuuuuuuuuuuu mal.


Estoy pensando en guardarlas en una lista tal y como habéis apuntado. Creo una lista de "Timage" tal y como apuntaba mi querido amigo ecfisa pero después no soy capaz de asignarla al componente TImage. Esto es lo que estoy haciendo (ejemplo tontuno):


Código Delphi [-]
..
  Lista:=TStringList.Create(nil);
  Imagen:=TImage.Create(nil);

  Imagen.Picture.LoadFromFile('D:\TEMP\1.JPG');
  Lista.AddObject('IMAGEN1', TObject(Imagen));
..


Entendiendo que esto anterior sea correcto luego no sé cómo asignarla al TImage.


¿Alguien me puede ilustrar?


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #5  
Antiguo 24-11-2020
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 estimado amigo

Una vez asignado el objeto puedes hacer
Código Delphi [-]
  Lista  := TStringList.Create;
  Imagen := TImage.Create(nil);

  Imagen.Picture.LoadFromFile('D:\TEMP\1.JPG');
  Lista.AddObject('IMAGEN1', TObject(Imagen));

  // Ej1: Mostrar el TImage creado  (igual a hacer: Imagen.Parent := Self;)
  TImage(Lista.Objects[0]).Parent := Self;

  // Ej2: Asignar la imágen a otro TImage
  Image1.Picture.Assign(TImage(Lista.Objects[0]).Picture);
Para referirte al objeto imagen almacenado, usa el moldeo TImage(Lista.Objects[n]).

Otro ejemplo similar que asigna una imagen cargada en un TStringList a un TImage creado en tiempo de diseño:
Código Delphi [-]
var
  pic: TPicture;
  Lista: TStringList;
begin
  Lista := TStringList.Create;
  pic := TPicture.Create;

  Lista.AddObject('Imagen1', TObject(pic));
  TPicture(Lista.Objects[0]).LoadFromFile('C:\TMP\IMAGEN.JPG');

  Image1.Picture.Assign(TPicture(Lista.Objects[0]));
...

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 24-11-2020 a las 21:31:20. Razón: Agregar ejemplo
Responder Con Cita
  #6  
Antiguo 25-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
Daniel, gracias compañero. Como siempre es un placer saber de ti.
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 25-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
Como añadido a lo que ha comentado [ecfisa], también puedes probar, por ejemplo, con Streams.

Puedes cargar las imágenes en la lista utilizando lo siguiente:
Código Delphi [-]
  ts := TFileStream.Create('f:\__Imagenes__\Imagenes Varias\Logotipos\Logotipo.jpg', fmOpenReadWrite);
  Lista.AddObject(i.ToString, ts);

Y asignarla a un TImage con este:
Código Delphi [-]
  ts := TStream(Lista.Objects[0]);
  Image1.Picture.LoadFromStream(ts);


De forma similar debes poder utilizar TStringList, TObjectList, TList<TStream>, TArray<TStream>.
__________________
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
  #8  
Antiguo 25-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
Gracias Germán.


Ya había pensado también en la posibilidad de usar Streams pero, como casi siempre, os adelantáis.


De momento estoy intentando resolver el tema con TStringList pero ahora se me ocurre que me vendría bien poder buscar dentro de la lista por el nombre del objeto pero no consigo dar con la sintaxis, si es una lista de strings se busca con "IndexOf" pero en este caso que es una lista de objetos.... ¿cómo se haría la búsqueda por el nombre del objeto?


Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 25-11-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola.

Al agregar el objeto al StringList debes colocarle un identificador. El IndexOf verifica ese identificador.

Código Delphi [-]
procedure TForm1.ListarObjetos(Sender: TObject);
  const
    //Algunos nombres están repetidos
    Nombres : Array [0..7] of string = ('Obj1', 'Obj2', 'Obj3', 'Obj1', 'Obj4', 'Obj2', 'Obj5', 'Obj1');
  var
    i: integer;
    ListaObjetos: TStringList;
    Nombre: string;
begin
  ListaObjetos := TStringList.Create;
  try
    for i := Low(Nombres) to High(Nombres) do
    begin
      Nombre := Nombres[i].Trim;

      if Nombre.IsEmpty or (ListaObjetos.IndexOf(Nombre.ToUpper) >= 0) then
        Continue;

      ListaObjetos.AddObject(Nombre.ToUpper, TObject.Create);
    end;    

    //En este punto se deben tener 5 objetos en la lista
  finally
    ListaObjetos.Free;
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #10  
Antiguo 25-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
Cita:
Empezado por newtron Ver Mensaje
...pero ahora se me ocurre que me vendría bien poder buscar dentro de la lista por el nombre del objeto pero no consigo dar con la sintaxis

Bueno, por eso hemos comentado lo del TStringList, porque te permite almacenar una cadena asociada a cada objeto.
Como deriva de TStrings, también posee el método IndexOf o el método Find (si está ordenada), que funcionan de la misma manera.
__________________
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
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 18:11: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
Copyright 1996-2007 Club Delphi