Ir al contenido


Foto

[RESUELTO] Cargar imagenes en ejecucion


  • Por favor identifícate para responder
8 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 octubre 2010 - 01:33

Hola
Estoy tratando de cargar unas imagenes en tiempo de ejecucion.
Lo que hago es crear los componentes TImage y cargar tantan imagenes como contenga un ListBox.
Lo que hago:
Cargo las imagenes (ruta y nombre) en un ListBox e inmediatamente creo las imagenes de estos.
La cosa es que me crea la cantidad de imagenes, pero solo del primer dato, osea, todas repetidas, no recorre el listBox.
Este es el codigo que las carga:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   lista: TStringList;
  4.   i: integer;
  5.   Ima: TImage;
  6. begin
  7.   lista := FindFile(ExtractFilePath(Application.ExeName)+'\*.BMP');
  8.   ListBox1.Items.Assign(lista);
  9.   label3.Caption:= IntToStr(Lista.Count);
  10.   lista.Free;
  11.  
  12.     Ima := TImage.Create(Self);
  13.     with ListBox1 do begin
  14.     for i := 1 to 3 do begin
  15.     Ima.Picture.LoadFromFile(ListBox1.Items[ListBox1.ItemIndex+1]);
  16.     end;
  17.     end;
  18.     Ima.Top := 10;
  19.     Ima.Left := 10;
  20.     Ima.Parent := Panel1;
  21.     if listaEtiquetas.Count >= 1 then
  22.     Ima.Top := TImage(listaEtiquetas.Items[listaEtiquetas.Count-1]).Top + 50;
  23.     listaEtiquetas.Add(Ima);
  24.     If listaEtiquetas.Count <> StrToInt(label3.Caption) then
  25.     Form1.Button1.Click;
  26.  
  27. end;


Saludos
  • 0

#2 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 07 octubre 2010 - 01:38

Hola Caral.

Este código no puede estar bien (seguramente un error de copiar distintas partes con Copy/Paste). Solo creas una TImage, te falta un bucle sobre ListBox1.Items.

NOTA: Por cierto, yo de ti evitaría al máximo los with. Solo te van a dar problemas por confusiones de referenciar lo que no pretendías referenciar. En mi opinión esta construcción es lo primero que debería desaparecer del lenguaje de Delphi.

También te recomiendo que identes el código, facilita mucho su lectura, comprensión y el cometer menos errores.

Saludos.
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 octubre 2010 - 01:41

Asi a ojo de buen cubero y sin delphi a la mano :p



delphi
  1.     with ListBox1 do begin
  2.       for i := 1 to 3 do begin
  3.         Ima.Picture.LoadFromFile(ListBox1.Items[ListBox1.ItemIndex+1]);
  4.         Ima.Top := 10;
  5.         Ima.Left := 10;
  6.         Ima.Parent := Panel1;
  7.         if listaEtiquetas.Count >= 1 then
  8.         Ima.Top := TImage(listaEtiquetas.Items[listaEtiquetas.Count-1]).Top + 50;
  9.         listaEtiquetas.Add(Ima);
  10.         If listaEtiquetas.Count <> StrToInt(label3.Caption) then
  11.           Form1.Button1.Click;
  12.       end;
  13.     end;



Salud OS
  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 07 octubre 2010 - 01:47

Asi a ojo de buen cubero y sin delphi a la mano :p



delphi
  1.     with ListBox1 do begin
  2.       for i := 1 to 3 do begin
  3.         Ima.Picture.LoadFromFile(ListBox1.Items[ListBox1.ItemIndex+1]);
  4.         Ima.Top := 10;
  5.         Ima.Left := 10;
  6.         Ima.Parent := Panel1;
  7.         if listaEtiquetas.Count >= 1 then
  8.         Ima.Top := TImage(listaEtiquetas.Items[listaEtiquetas.Count-1]).Top + 50;
  9.         listaEtiquetas.Add(Ima);
  10.         If listaEtiquetas.Count <> StrToInt(label3.Caption) then
  11.           Form1.Button1.Click;
  12.       end;
  13.     end;



Salud OS


Este bucle es fijo de 1 a 3. Tiene que hacer un bucle de 1 a ListBox.Items.Count si quiere tratar tantos elementos como haya en el ListBox.

Y en cada pasada del bucle tiene que tratar al elemento

delphi
  1. ListBox.Items[i]


  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 octubre 2010 - 01:48

Hola
Gracias amigos:
Marc: Lo del with es solo por que ya no se de donde agarrarme : :
Egostar amigo: No funciona, queda el listBox dando tumbos y no para ni muestra las fotos.
Saludos
  • 0

#6 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 07 octubre 2010 - 01:54

Debería parecerse más a algo de este estilo :



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   lista: TStringList;
  4.   i, NumEtiquetas: integer;
  5.   Ima: TImage;
  6. begin
  7.  
  8.   lista := FindFile(ExtractFilePath(Application.ExeName)+'\*.BMP');
  9.   ListBox1.Items.Assign(lista);
  10.   NumEtiquetas := Lista.Count;
  11.   lista.Free;
  12.   label3.Caption:= IntToStr(NumEtiquetas);
  13.  
  14.   for i := 0 to NumEtiquetas - 1 do begin
  15.  
  16.     Ima.Picture.LoadFromFile(ListBox1.Items[i]);
  17.     Ima.Top := 10;
  18.     Ima.Left := 10;
  19.     Ima.Parent := Panel1;
  20.  
  21.     if i > 0 then begin
  22.       Ima.Top := TImage(listaEtiquetas.Items[i - 1]).Top + 50;
  23.     end;
  24.  
  25.     listaEtiquetas.Add(Ima);
  26.  
  27.     If 1 <> NumEtiquetas then begin
  28.       Form1.Button1.Click;
  29.     end;
  30.  
  31.   end;
  32. end;



Lo de identar el código es muy importante, de verdad.
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 octubre 2010 - 02:17

Hola
El codigo de Marc funcion perfecto con algunos ajustes, no tenia creada la imagen y le elimine el llamado repetido al boton ya que esto es lo que hacia que no se detuviera. (y)
Aqui os dejo el codigo, cuando se presiona en el list sale la foto en grande, me gustaria que hiciera lo mismo cuando se presionara una de las fotos pequeñas.
Ademas me gustaria saber como hago si excede el tamaño del panel, que cambie en vez del left el top de la foto pequeña, mirad el codigo, lo entenderéis perfectamente.
Saludos

Archivos adjuntos


  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 octubre 2010 - 06:24

Hola
Ya pude hacer que cuando se presione una imagen pequeña se cargue en grande.
Esto lo hice creando un evento onclick y definiendo a cual imagen se le hace el click por medio del tag.
Gracias por vuestra ayuda y consejos.
Doy por resulto el tema. (y)
Saludos
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 octubre 2010 - 07:17

Que bien amigo, otro hilo resuelto (y)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.