PDA

Ver la Versión Completa : Formulario tipo galeria de imagenes


judit25
22-05-2008, 16:57:05
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
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í (http://www.torry.net/quicksearchd.php?String=gallery&Title=Yes)

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 (http://www.delphi-jedi.org/) 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:
ImagesViewer1.LoadImages;

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



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:


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


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



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