Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Galeria de Imágenes en Delphi 7 (Paradox) (https://www.clubdelphi.com/foros/showthread.php?t=80827)

Emilio 11-08-2007 14:20:52

Galeria de Imágenes en Delphi 7 (Paradox)
 
Hola, despues de una incansable búsqueda me resultó inutil tratar de hacer una galeria de imágenes por que realicé un formulario de facturación pero queria que al agregar algun articulo se tuviera la libertad de elegir una imagen y guardarla junto con sus datos.

de tanto intentar y fallar codigos posibles para esta accion logré alfin está funcion

la falta de informacion no es buena asi que voy a explicar lo que hice ya que he visto en muchisimos foros la busca de esta solucion.

trataré de ser lo mas específico posible ok? :)

pasos:

1- crea una carpeta ( donde se guardará el project).
2- crea una sub carpeta donde guardarás las imagenes.
3- crea una tabla (paradox 7) con los siguientes campos( nombF,DirF)con el nombre de dbFoto.
4- inserta en el formulario un componente opendialog, un componente table, 5 componente buttons, 1 componente label,un componente image y finalmente 2 componentes edit.
5-al button 1 lo llamaremos cargar al button 2 lo llamaremos guardar al buton 3 lo llamaremos cerrar al buton4 lo llamaremos anterior y al buton5 lo llamaremos siguiente.:)
6- el componente label es para que vaya encima del edit2 llamado nombre:

ok ya tenemos armado el formulario ahora vamos con el codigo :D

ahora solo haremos doble clic en cualquier parte vacia del formulario y ponemos este codigo

Código Delphi [-]
// ponemos los edit en blanco (no me gusta usar el clear por que en algunos casos da error :)
edit1.Text:='';
edit2.Text:='';
//enlazamos la tabla con el componente table
TABLE1.DatabaseName:=ExtractFilePath(Application.ExeName);
Table1.TableName:='bdfoto.db';
Table1.Open;


luego hacemos doble clic al boton cargar y ponemos este codigo

Código Delphi [-]
OpenDialog1.Execute;
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
edit1.Text:=OpenDialog1.FileName;
luego hacemos doble clic en el boton guardar y ponemos este codigo
Código Delphi [-]
table1.Insert;
table1.FieldValues['dirf']:=edit1.Text;
table1.FieldValues['nomf']:=edit2.Text;
table1.post;
application.MessageBox('Foto Guardada','Guardar');
luego hacemos doble clic al boton anterior y ponemos este codigo
Código Delphi [-]
table1.prior;
edit1.Text:=table1.FieldValues['dirf'];
edit2.Text:=table1.FieldValues['nomf'];
 Image1.Picture.LoadFromFile(edit1.text);

luego hacemos doble clic en el boton siguiente y ponemos este codigo
Código Delphi [-]
table1.Next;
edit1.Text:=table1.FieldValues['dirf'];
edit2.Text:=table1.FieldValues['nomf'];
Image1.Picture.LoadFromFile(edit1.text);

y luego tienen que hacer los siguientes 21 pasos:

era un chiste ya esta listo jejejeje.

recuerda que para que el programa funcione debe haber imagenes en la carpeta donde se creo el project...

Espero les sirva a mi me sirvio sin problemas :D

como funciona?: funciona es guardando la ruta de acceso en la tabla ( y todo el mundo se quema las neuronas averiguando en internet como insertar graficos en una tabla).. no digo que no se pueda sino que es algo fastidioso y de paso que vas a recargar la base de datos de muchos de MB por que en la tabla no se guarda jpg ni bmp ni gif en la tabla se guarda es mediante codigos binarios en fin....... creo que mi solucion es mucho mas simple y cumple la misma funcion :)

mightydragonlor 25-08-2007 00:05:31

Pues eso no es nada, yo ya conseguí guardar imagenes en la base de datos.
Este es el código que guarda la imagen en una base de datos:
Código:

[delphi]
procedure TfrmAgenda.Button1Click(Sender: TObject);
begin
{dmConexion es un TDataModule}
{TblContacto en un TTable}
{ImgFoto es un TImage}
{El Resto son TEdit}
dmConexion.TblContacto.InsertRecord([NIL,NICK.Text,NOMBRES.Text,APELLIDOS.Text,TEL_PER.Text
      ,TEL_LAB.Text,TEL_MOV.Text,DIRECCION.Text,CIUDAD.Text
      ,MAIL_PER.Text,MAIL_LAB.Text,MAIL_ADD.Text
      ,FECHA_NAC.Date,ImgFoto.Picture,NOTAS.Lines]);
end;

el problema es que al cargar solo me muestra los Bitmap y no los JPEG que estan guardados en un campo Graphic de la base de datos, si alguien sabe como corregir esto se lo agradeceria, tambien agradeceria una ayuda para convertir el contenido de un Image a un Bitmap, gracias.

BlackDaemon 27-08-2007 21:32:29

Y donde esta tu código mightydragonlor ??

Y sobre el code pues siempre es útil tener algo así, gracias por compartir

saludos!

mightydragonlor 29-08-2007 21:40:32

Lo siento, pero es que no me deja editar el comentario, pero aquí va el código.
Es necesario convertir la imagen a un Bitmap y para eso es la función ToBMP
dmConexxion es un DataModule
TblContacto es un TTable
Código Delphi [-]
procedure TfrmAgenda.btnGuardarClick(Sender: TObject);
begin
  dmConexion.TblContacto.AppendRecord([NIL,NICK.Text,NOMBRES.Text,APELLIDOS.Text,TEL_PER.Text
    ,TEL_LAB.Text,TEL_MOV.Text,DIRECCION.Text,CIUDAD.Text
    ,MAIL_PER.Text,MAIL_LAB.Text,MAIL_ADD.Text
    ,FECHA_NAC.Date,ToBMP(ImgFoto.Picture.Graphic),NOTAS.Lines]);
end;

function TfrmAgenda.ToBMP(g: TGraphic): TBitMap;
begin
  try
    Result:=TBitmap.Create;
    Result.Width:= g.Width;
    Result.Height:= g.Height;
    Result.Palette:=g.palette;
    Result.PixelFormat:=pf15bit;
    Result.Canvas.Draw(0,0,g);
  except
    Result:=nil;
  end;
end;
Listo, es muy sencillo, la verdad es que me gustaria guardar la imagen como JPG, ya que como BMP pesa mucho, pero tengo problemas cargando la imagen desde la base de datos si está guardada en JPG, algo que no pasa si la guardo como BMP.

casacham 01-09-2007 15:48:50

Holo a todos, Lamento por lo precario que es utilizar PARADOX , en ultima instancia pueden utilizar bases de datos administradas por Access, que es lo mismo que JET OLE 4. Lo que no aclara el procedimiento es como borrar esos ragistros, aunque ya se que solo es para una biblioteca predefinida. Si les interesa el tema como almacenar imagenes en una base de datos => primero, no hay porque convertirlas a BMP, se pueden almacenar de cualquier tipo, segundo => se pueden almacenar en la misma base de datos y no solo la direccion. Para saber como hacer todo eso deben leer el boletin pascal N° 11 cuya direccion es esta:

http://www.latiumsoftware.com/es/pascal/index.php

o bien

http://www.latiumsoftware.com/es/pascal/0011.php

disfruten leyendo ese articulo, aprenderan cosas muy interesantes

madriles 18-11-2008 14:38:06

hola a todos, yo lo que uso es lo siguiente, creo una subcarpeta donde van las fotos o graficos, en formato jpg
Las imagenes tienen que tener un nombre que coincida con alguno de los campos de la base de datos, en mi caso concreto use el de la reerencia del producto. en el DataSouce pongo este codigo
Código Delphi [-]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
   try
     Foto := Ruta + 'MisFotos\'+DBEdit4.Text+'.jpg';
     if FileExists(Foto) then
       Image1.Picture.LoadFromFile(Foto)
     else
       Image1.Picture := nil;
   Except
       Image1.Picture := nil;
   end;
end;
se repite el codigo en el DataSource1StateChange

Foto es una variable String;
Ruta es una string donde esta la ruta del ejecutable, yo la pogo en el onCreate

Ruta := ExtractFilePath(ParamStr(0));

asi no necesitas almacenar las imagenes en ninguna base ni crear campos especificos con la ruta, a mi me resulta muy practico


La franja horaria es GMT +2. Ahora son las 08:03:43.

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