Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Formulario tipo galeria de imagenes (https://www.clubdelphi.com/foros/showthread.php?t=56636)

judit25 22-05-2008 16:57:05

Formulario tipo galeria de imagenes
 
Buenos Dias

Mi inquietud es la siguiente:

Quiero realizar un formulario que se va a llenar de fotos cuya ruta se guarda en una tabla. Este formulario va a ser llamado de un formulario consulta donde al momento de seleccionar una marca te pueda permitir mostrar todas las fotos de los productos de esa marca en dicho formulario (no hay una cantidad especifica de fotos).

Este formulario va a mostrar las fotos en 5 columnas y por pantalla caben 3 filas, si hay mas de tres filas debe de mostrar un scrollbar vertical que me permita moverme para abajo y para arriba, para ver todas las fotos.

Ademas que si le dan un click encima de la foto me devuelva al formulario anterior con los datos del producto al que pertenece esa foto.

Hay una forma de hacer esto? que dependiendo la cantidad de fotos que encuentre de esa marca se vaya llenando por fila el formulario.

No se si me explique bien.

Gracias anticipadas.

Saludos

Neftali [Germán.Estévez] 22-05-2008 17:08:22

Deberías concretar un poco más en cual es la pregunta.
¿Qué es lo que necesitas saber?

Para las barras deberías utilizar un ScrollBox; Dentro de un ScrollBox, los controles TImage que necesites (sólo carga imágenes en los visibles); A medida que vayas moviéndote carga las nuevas imágenes.

Podría ser una forma de hacerlo, aunque hay que ver cuanta memoria consume y lo que tarda en cargar las imágenes de disco.

¿Te refieres a eso? ¿A otra cosa?

judit25 22-05-2008 17:42:57

Cita:

Empezado por Neftali (Mensaje 288559)
Deberías concretar un poco más en cual es la pregunta.
¿Qué es lo que necesitas saber?

Para las barras deberías utilizar un ScrollBox; Dentro de un ScrollBox, los controles TImage que necesites (sólo carga imágenes en los visibles); A medida que vayas moviéndote carga las nuevas imágenes.

Podría ser una forma de hacerlo, aunque hay que ver cuanta memoria consume y lo que tarda en cargar las imágenes de disco.

¿Te refieres a eso? ¿A otra cosa?



Gracias por responder.

A lo que me refiero es de como puedo cargar todas las imagenes que tengo en una tabla de una marca especifica (que filtro del formulario anterior), en un formulario, donde al darle click a esa imagen me retorne al formualrio anterior con los datos de ese producto al que hace referencia esa imagen.

Segun el numero de imagenes que tenga la tabla o el query al filtrarlo debera de irse creando un dbimage (me imagino) donde se va a cargar la imagen desde la tabla y colocandola una al lado de la otra o una abajo de la otra.

No se si me explique mejor.

Gracias de nuevo

BlueSteel 22-05-2008 17:57:50

Hola...

puede que te sirva el componente NiceGallery.. que lo puedes obtener desde Aquí

no lo he probado....

Salu2:p:D

santus 22-05-2008 19:21:36

Holas

Para mostrar eso que quieres hacer, te recomiendo que uses el "ImagesViewer" de las librerias JEDI que anda muy bien.

Lo único que en vez de tomarte las imagenes desde una base de datos, te las toma desde un directorio. Supongo que te será sencillo adaptarlo a este componente.

Para usarlo solamente tienes que especificar en la propiedad "Directory" el directorio de las imagenes y listo.

Despues para actualizar las imagenes:
Código Delphi [-]
ImagesViewer1.LoadImages;

Despues tambien te dejo algo de codigo para que te des una idea de como trabajan:

Código Delphi [-]

procedure TfPropiedades.btnBorrarImagenSelecPropClick(Sender: TObject);
begin
  inherited;
  // Borramos la foto seleccionada.
  if (ImagesViewer1.Count > 0) and (ImagesViewer1.SelectedIndex >= 0) then begin
    DeleteFile(ImagesViewer1.Items[ImagesViewer1.SelectedIndex].FileName);
    ImagesViewer1.LoadImages;
  end;
end;

Y siguiendo el ejemplo haces lo que tu quieras.

Espero que te sirva.

Mucha suerte!

judit25 22-05-2008 21:48:46

Buenas tardes!

Les cuento que he conseguido parte de lo que necesito, solo me falta poder asignar en tiempo de ejecucion lo que va a hacer al momento de que presionen click en la imagen.

Por ahora este es el codigo que he logrado:

Código Delphi [-]
procedure TFrmConFotosAros.FormShow(Sender: TObject);
var
 NumEdits, I, j: Integer;
begin
j := 11;
  if Query1.RecordCount > 0 then
    begin
      Query1.First;
      while not Query1.Eof do
        begin
          if (Query1Ruta.IsNull) or (Query1Ruta.Value = '') then
            begin
              NumImagenes := NumImagenes;
              Query1.Next;
            end
          else
            begin
              NumImagenes := NumImagenes + 1;
              with TDBImage.Create(Self) do
                begin
                  Name := 'DBImage' + IntToStr(NumImagenes);
                  Parent := Self;
                  Height := 126;
                  Width := 129;
                  if NumImagenes = 1 then
                    begin
                      j := j;
                    end
                  else
                    begin
                      j := j + 159;
                    end;
                  Top := j;
                  stretch := true;
                  Picture.LoadFromFile(Query1Ruta.Value);
                  onclick :=  MyClick;
                end;
    
//Esta parte lo hago para poder guardar el codigo del producto al que pertenece la imagen 
              with TEdit.Create(Self) do
                begin
                  Name := 'Edit' + IntToStr(NumImagenes);
                  Parent := Self;
                  Top := 25*(NumImagenes + 1);
                  text := Query1Cod_Prod.Value;
                  Visible := false;
                end;

              Query1.Next;
            end;     
        end;
    end;

end;

Esto es lo que debe de hacer al momento de darle click en una de las imagenes

Código Delphi [-]
procedure TFrmConFotosAros.MyClick(Sender:TObject);
var
nomed1 : string;
nomed : integer;
begin
nombreedit:= (Sender as TdbImage).Name;

nomed:= strtoint(copy(nombreedit,8,5));
nomed1:= 'Edit' + IntToStr(nomed);  // Aqui tengo el nombre del edit que esta asociado a la dbimage que se pulso

FConAros.Query1.Close();
FConAros.Query1.SQL.Clear;

FConAros.Query1.SQL.Add('SELECT * FROM QAro');
FConAros.Query1.SQL.Add(' WHERE Cod_Prod like '+quotedStr(('%'+Edit1.Text)+'%'));  //donde esta Edit1, debe de tomar el edit que hace referencia a la imagen (nomed1).   
FConAros.Query1.Open();
if FConAros.Query1Ruta.IsNull then
  FConAros.dbImage1.Visible := false
else
  begin
    FConAros.dbImage1.Visible := true;
    FConAros.dbImage1.Picture.LoadFromFile(FConAros.Query1Ruta.Value);
  end;
FconAros.Show;
close;
end;

Como puedo tomar el valor (Text) que esta en ese Edit, que el nombre saque en esa variable?.

Es decir si por ej presione en el dbimage1, en la variable nomed1 tendria Edit1. Como puedo convertirlo a un TEdit para poder usar el .text de los edits. (Edit1.text) que ahi es que guardo el codigo que me hace falta para poder filtrar el Query.

Gracias anticipadas

Saludos

judit25 23-05-2008 20:19:40

Hola a tod@s

Les comento que pude encontrar la solucion de lo que necesitaba. Aqui dejo el codigo que actualice por si alguien se encuentra en la misma situacion que yo y necesite algo parecido.

EL codigo que cambie fue el del Procedure MyClick, lo demas se quedo igual.

Aqui esta el codigo

Código Delphi [-]

procedure TFrmConFotosAros.MyClick(Sender:TObject);
var
nomed1, nomed3 : string;
nomed, I: Integer;
Temp: TComponent;

begin
nombreedit:= (Sender as TdbImage).Name; 

nomed:= strtoint(copy(nombreedit,8,5)); 
nomed1:= 'Edit' + IntToStr(nomed); 

for I := ComponentCount - 1 downto 0 do
  begin
    Temp := Components[i];
    if (Temp is TEdit) then
      begin
        if ((Temp as TEdit).Name = nomed1) then  
          begin
            nomed3 := (Temp as TEdit).Text;
            FConAros.Query1.Close();
            FConAros.Query1.SQL.Clear;

            FConAros.Query1.SQL.Add('SELECT * FROM QAro');
            FConAros.Query1.SQL.Add(' WHERE Cod_Prod like '+quotedStr(('%'+nomed3+'%')));
            FConAros.Query1.Open();
            if FConAros.Query1Ruta.IsNull then
              begin
                FConAros.dbImage1.Visible := false;
              end
            else
              begin
                FConAros.dbImage1.Visible := true;
                         FConAros.dbImage1.Picture.LoadFromFile(FConAros.Query1Ruta.Value);
              end;
            FconAros.Show;
            close;
          end
        else
          begin
            nomed3 := '';
          end;
      end;
  end;
end;

Muchas gracias a todos por su ayuda.

Saludos


La franja horaria es GMT +2. Ahora son las 17:29:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi