Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Gracias Ecfisa.

Tu proposición funciona bien, solo que tengo un pequeño problema, al asignarle la imagen el TDBImage, me dice que bitmap image is not valid.

He probado con un TImage a secas asignandole el valor y funciona, solo que me muestra una sola foto y no toda la hilera

Código Delphi [-]
 
procedure TF_Camions.Fotos_CAfterScroll(DataSet: TDataSet);
var
        jpg:TJpegImage;
        foto:TMemoryStream;
begin
        If FileExists('C:\Bombers_1.0\Temp\Temporal.jpg') then
        DeleteFile ('C:\Bombers_1.0\Temp\Temporal.jpg');
        If Fotos_CFOTO.Value<>'' then
        begin
                Jpg:=TJpegImage.create;
                Foto:=TMemoryStream.create;
                try
                        Fotos_CFOTO.SaveToStream(Foto);
                        Foto.Seek(0,soFromBeginning);
                        Jpg.LoadFromStream(Foto);
                        Jpg.SaveToFile('C:\Bombers_1.0\Temp\Temporal.jpg');
                        if jpg.Width > jpg.Height then
                        begin
                                Image2.Width := 500;
                                Image2.Height := 376;
                                Image2.Picture.Assign(Jpg);
                                Image1.Width := 500;
                                Image1.Height := 376;
                                Image1.Stretch:=False;
                                Image1.Picture.Assign(Jpg);
                                Image4.Width:=50;
                                Image4.Height:=37;
                                Image4.Stretch:=True;
                                Image4.Picture.Assign(Jpg); 
                        end
                        else
                        begin
                                Image2.Width := 376;
                                Image2.Height:=500;
                                Image2.Picture.Assign(Jpg);
                                Image1.Width := 282;
                                Image1.Height := 376;
                                Image1.Stretch:=True;
                                Image1.Picture.Assign(Jpg);
                                Image4.Width:=37;
                                Image4.Height:=50;
                                Image4.Stretch:=True;
                                Image4.Picture.Assign(Jpg); 
                        end;
                finally
                        Foto.Free;
                        Jpg.Free;
                end;
        end
        else
        begin
                Image2.Picture.Assign(nil);
                Image1.Picture.Assign(nil);
                Image4.Picture.Assign(nil);
        end;
end;

Gracias de nuevo

Josep
Responder Con Cita
  #2  
Antiguo 18-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jafera.

Entiendo el problema pero al menos yo, no pude encontrar en forma directa evento o redefinición de método alguno para hacer la conversión de TJPEGImage a TBitmap, antes de que se produzca la asignación del campo al TDBImage.

Se me ocurrió que una opción, si no son muchos datos, podría ser utilizar un TClientDataSet en memoria. Para el ejemplo que te adjunto hice una tabla con sólo dos campos, un campo entero llamado ('ID') y otro blob que contiente la imágen ('IMAGEN'). Datos estos que cargo en el TClientDataSet mediante un TIBQuery.

Código Delphi [-]
uses jpeg;

procedure JpgToBitmap(AField: TField; B:TBitmap);
var
  J: TJPEGImage;
begin
  J:= TJPEGImage.Create;
  try
    J.Assign(TBlobField(AField));
    B.Height:= J.Height;
    B.Width:= J.Width;
    B.Assign(J)
  finally
    J.Free
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  B: TBitmap;
begin
  CDS1.CreateDataSet;
  CDS1.Open;
  IBQuery1.Open;
  B:= TBitmap.Create;
  try
    while not IBQuery1.Eof do
    begin
      CDS1.Append;
      CDS1ID.Value:= IBQuery1.FieldByName('ID').Value;
      JpgToBitmap(IBQuery1.FieldByName('IMAGEN'), B);
      CDS1Imagen.Assign(B);
      CDS1.Post;
      IBQuery1.Next
    end;
  finally
    B.Free
  end;
  IBQuery1.Close;
  DBCtrlGrid1.DataSource:= DataSourceCDS1;
  DBImage1.DataField:= 'IMAGEN';
  DBImage1.Stretch:= True
end;
A partir de aquí podés utilizar todos los DBControls a traves del ClientDataSet, es decir que para mostrar información no se precisa más. Pero si existe la posibilidad de que se modifique algún dato deberías actualizar lo realizado al finalizar...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 19-03-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Gracias por la respuesta Ecfisa.

He implementado el codigo que me pasaste y como el componente ClientDataSet no lo habia usado nunca me arrojó algún problema.

Primero que no encontraba el data provider, le adjunte un dataset provider, luego me dice que no esta declarado el CDS1ID ni el CDS1Imagen (Undeclared Identifier), no se si me dejo alguna cosa la vuelo, ya que repito no había usado jamás este componente.

Saludos

Josep
Responder Con Cita
  #4  
Antiguo 19-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jafera.

No tendría que darte ningún problema, lo único engorroso es que tenes que crear los campos persistentes que se correspondan a los de tu tabla. Estos campos no existen físicamente solo en memoria, no se requiere de ningún data provider.

Los campos persistentes se crean al igual que en cualquier TDataSet. Por ejemplo para crear el campo Imagen:
Doble click sobre el componente CDS1 -> Click botón derecho -> New Field y luego:



Del mismo modo con los demás campos, por supuesto que Type tendrá que ser del tipo correspondiente al valor que se le asignará.
Los nombres CDS1ID y CDS1Imagen se pueden dar arbitrariamente, en este caso coinciden con el nombre del componente + nombre de campo.

Si no te queda totalmente claro avisame que adjunto un ejemplo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 19-03-2012 a las 13:22:14.
Responder Con Cita
  #5  
Antiguo 19-03-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
Gracias de nuevo.

Es que hoy tengo el coco un poco espeso.

Ahora si que los campos aparecen, no sabia que se creaban igual.

El nuevo problema es que ahora me aparece el DBImage en blanco y solo uno, aunque el registro tenga 3 imagenes

No se, sigo investigando

Josep
Responder Con Cita
  #6  
Antiguo 19-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jafera.

Te adjunto el ejemplo con la tabla incluída, crea una carpeta y descomprimelo allí, en el evento OnCreate se asignan los valores necesarios al TIBDatabase.

Para evitarte inconvenientes cambié el acceso al predeterminado:
user_name: SYSDBA
password: masterkey

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip ejemplo.zip (73,0 KB, 13 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 19-03-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 18
jafera Va por buen camino
No me deja abrir la tabla, ni con el IBConsole, me da este error:

Unsupported on-disk structure for file C:\EJEMPLO\PRUEBA.FDB; found 32779, support 10.

Imagino que es la version de Firebird, yo uso la 1.5.6

Saludos

Josep
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer directorio Pedro-Juan Conexión con bases de datos 4 09-02-2011 18:50:43
Mostrar ficheros de un directorio y subdirectoros chinchan C++ Builder 3 11-01-2009 22:26:49
Mostrar directorio con ShellExecute MON___ API de Windows 5 26-03-2008 13:07:00
Borrar archivos de un directorio nelem Internet 6 29-10-2007 16:04:00
Mostrar un directorio con el explorador de archivos de windows Jan_polero API de Windows 2 11-01-2005 18:40:21


La franja horaria es GMT +2. Ahora son las 19:42:14.


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
Copyright 1996-2007 Club Delphi