PDA

Ver la Versión Completa : Cargar muchas imagenes en un Form!


PauloMeno
02-11-2012, 17:25:59
Buenaaas! Tengo una duda importante..
Quiero colocar en un form una imagen dependiendo del valor de una variable.. Puede ser con un Case..
El tema es que esta variable puede tomar al rededor de 400 valores y no voy a hacer un Case de ese tamaño!!
Mi pregunta es si hay otra manera de hacer esto??
MUCHAS GRACIASSS!

marcoszorrilla
02-11-2012, 17:29:15
Sería necesario conocer si el valor de esa variable lo produce el programa como resultado de una operación o la eligirá el usuario.

Un Saludo.

PauloMeno
02-11-2012, 17:33:55
El tema es asi.. Tengo una base de datos y para cada persona que esta cargada en la base necesito asignarle una imagen diferente.. Seria una foto de cada persona..
La variable seria el Id..

Casimiro Notevi
02-11-2012, 17:36:37
Entonces en form sólo vas a presentar una imagen.

Por cierto, bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

dec
02-11-2012, 17:41:31
Hola,

Asocia el "ID" de la imagen con la imagen misma. Por ejemplo, la imagen puede tener como nombre dicho "ID". De esta manera, bastará conque busques en el directorio apropiado la imagen correspondiente al "ID". Supón que guardas tus imágenes en "C:\Imgs". Supón que tienes que mostrar la imagen con "ID" "1234". Entonces, tú cargarías en un "TImage" la imagen cuya ruta sería: "C:\Imgs\1234.jpg", por ejemplo. Esto en el supuesto caso de que las imágenes estuvieran en un directorio. Si están en una base de datos, deberás, en todo caso, buscar la imagen adecuada ahí mediante el "ID" correspondiente.

ecfisa
02-11-2012, 17:42:11
El tema es asi.. Tengo una base de datos y para cada persona que esta cargada en la base necesito asignarle una imagen diferente.. Seria una foto de cada persona..
La variable seria el Id..
Hola.

Supongo entonces que el valor de la variable sería de tipo entero, ahora me surgen estas dudas:

¿ Donde se encuentran las imágenes ?
Si se encuentran como archivos en el disco rígido, ¿ Sus nombres tienen una secuencia lógica ?


Saludos.

PauloMeno
02-11-2012, 17:42:19
Muchas gracias!..
Claro la idea es esa y ademas otros datos de cada persona..

marcoszorrilla
02-11-2012, 17:42:55
Yo concretamente, hago lo siguiente, almaceno las fotos en la BD y entonces solamente tengo que mostrarla en un control de base de datos para imágenes, pongamos un DbImage, no hay que hacer nada especial pues por cada persona existe una foto en el mismo registro.

almaceno las fotos en una carpeta, mas propio para productos que para personas, en el registro tengo un campo que indica el nombre de la foto en el disco y la ubicación, simplemente la cargo:

procedure TfrPVP.pg1Change(Sender: TObject);
begin
if (pg1.ActivePage = TbFoto) and (DmPrix.IBDtsPVPFOTOPRODUCTO.AsString <>'' )then
begin
try
fotoproducto.Picture.LoadFromFile('\\servidor\xx\datosfb\fotos\'+DmPrix.IBDtsPVPFOTOPRODUCTO.AsStrin g+'.jpg');
except
ShowMessage('Atención:La imagen no existe o no pudo cargarse.');
end;
end
else
fotoproducto.Picture.LoadFromFile('\\servidor\xx\datosfb\fotos\Nohay.jpg');
end;

Nohay, es una imagen que yo mismo he construido con una x en tamaño grande y color rojo.

Un Saludo.

PauloMeno
02-11-2012, 17:45:18
Si si de tipo entero..
Las imagenes se encuentran en el disco..
La idea que tengo es asignarle a cada imagen el numero de Id de la persona correspondiente
Ej: Juan tiene Id = 1 entonces la imagen de Juan va a tener como nombre 1

marcoszorrilla
02-11-2012, 17:48:59
Por si te sirve la idea para el futuro, yo he añadido un botón que me permite pasar la foto al portapapeles, para luego pegarla en Word por ejemplo:

procedure TfrPVP.spClipboardClick(Sender: TObject);
begin
Clipboard.Assign(FotoProducto.Picture.Graphic) ;
end;


Un Saludo.

PauloMeno
02-11-2012, 17:50:17
Yo concretamente, hago lo siguiente, almaceno las fotos en la BD y entonces solamente tengo que mostrarla en un control de base de datos para imágenes, pongamos un DbImage, no hay que hacer nada especial pues por cada persona existe una foto en el mismo registro.

almaceno las fotos en una carpeta, mas propio para productos que para personas, en el registro tengo un campo que indica el nombre de la foto en el disco y la ubicación, simplemente la cargo:

procedure TfrPVP.pg1Change(Sender: TObject);
begin
if (pg1.ActivePage = TbFoto) and (DmPrix.IBDtsPVPFOTOPRODUCTO.AsString <>'' )then
begin
try
fotoproducto.Picture.LoadFromFile('\\servidor\xx\datosfb\fotos\'+DmPrix.IBDtsPVPFOTOPRODUCTO.AsStrin g+'.jpg');
except
ShowMessage('Atención:La imagen no existe o no pudo cargarse.');
end;
end
else
fotoproducto.Picture.LoadFromFile('\\servidor\xx\datosfb\fotos\Nohay.jpg');
end;

Nohay, es una imagen que yo mismo he construido con una x en tamaño grande y color rojo.

Un Saludo.



Muchas gracias por tu aporte.. Lo voy a analizar bien ya que mucho no entendi.. Soy muy nuevo en el uso y manejo de Base de Datos.. Muchas gracias!

ecfisa
02-11-2012, 20:17:45
Hola PauloMeno.

Otra forma, es guardar la imágen directamente en cada registro en lugar de tener las imágenes en archivos aparte.

Te pongo un enlace que recuerdo trata sobre este otro modo de hacerlo, que no es ni mejor ni peor que el anterior. [guardar imagen en campo blob (http://www.clubdelphi.com/foros/showthread.php?t=81289)]

Con seguridad el tema ha sido tratado en más ocasiones, usa la busqueda de los foros por: blob, campo blob, imagen blob, ...

Saludos. :)

bulc
28-11-2012, 18:00:09
Hola PauloMeno.

Otra forma, es guardar la imágen directamente en cada registro en lugar de tener las imágenes en archivos aparte.

Te pongo un enlace que recuerdo trata sobre este otro modo de hacerlo, que no es ni mejor ni peor que el anterior. [guardar imagen en campo blob (http://www.clubdelphi.com/foros/showthread.php?t=81289)]

Con seguridad el tema ha sido tratado en más ocasiones, usa la busqueda de los foros por: blob, campo blob, imagen blob, ...

Saludos. :)
Puedes guardar las imágenes en un TImageList. Las puedes cargar fácilmente. Pero en este caso lo mejor es una base de datos como dicen los compañeros. Bulc.

richy08
11-02-2013, 19:35:18
Por si te sirve la idea para el futuro, yo he añadido un botón que me permite pasar la foto al portapapeles, para luego pegarla en Word por ejemplo:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TfrPVP.spClipboardClick(Sender: TObject); begin Clipboard.Assign(FotoProducto.Picture.Graphic) ; end;


Un Saludo.
buenas tardes marcoszorrilla, podrias mostrar el codigo que utilizaspara pasar la imagen a word, tengo una imagen cargada en clipboard que viene de un tdbchart que necesito mandarla a excel, creo que tu codigo podria serme de mucha ayuda

mil gracias de antemano

bulc
11-02-2013, 20:53:38
Buenaaas! Tengo una duda importante..
Quiero colocar en un form una imagen dependiendo del valor de una variable.. Puede ser con un Case..
El tema es que esta variable puede tomar al rededor de 400 valores y no voy a hacer un Case de ese tamaño!!
Mi pregunta es si hay otra manera de hacer esto??
MUCHAS GRACIASSS!
¿Puedes escalonar o agrupar las variables en varios grupos? Serían más manejables.
La otra opción que se me ocurre es usar una base de datos a posta para las imágenes y elegir un registro de forma aleatoria.
Luego muestras el gráfico de ese registro.

AzidRain
12-02-2013, 01:46:40
Delphi estilo pascal...Es una tarea de instituto donde piden "leer un id, buscar dicho id en una tabla, si s eencuentra el id mostrar la foto y datos del usuario"

O lo que es lo mismo
leer login y password
abrir tabla de usuarios y buscar login y password
si se encuentra mostrarlos,
si no, mostrar mensaje de error.

jhlsoft
20-03-2013, 23:42:12
Intento cargar una imagen jpg con 1mb de tamaño, y otra de 7mb...me sale el mensaje de jpeg error 53......como puedo silucionar este problema y poder apreciar imagenes de gran tamaño...gracias de antemano