Utilizo Firebird 1.00 con componentes de acceso IBO 4. Estoy utilizando el siguiente procedimiento para cargar y visualizar las imagenes:
Código:
PARA CARGAR:
procedure TExp700.BotonCargar(Sender: TObject);
var
Jpg: TJpegImage;
Stream: TMemoryStream;
FileExt: string;
GraphType: TGraphType;
begin
if OpenPicture.Execute then
begin
Jpg := nil;
Stream := nil;
try
Stream := TMemoryStream.Create;
FileExt := LowerCase(ExtractFileExt(OpenPicture.FileName));
if (FileExt = '.bmp') or (FileExt = '.dib') then
begin
GraphType := gtBitmap;
Stream.Write(GraphType, 1);
with Imagen.Picture.Bitmap do
begin
LoadFromFile(OpenPicture.FileName);
Imagen.Picture.Bitmap.SaveToStream(Stream);
end;
end
else if (FileExt = '.ico') then
begin
GraphType := gtIcon;
Stream.Write(GraphType, 1);
with Imagen.Picture.Icon do
begin
LoadFromFile(OpenPicture.FileName);
Imagen.Picture.Bitmap.SaveToStream(Stream);
end;
end
else if (FileExt = '.emf') or (FileExt = '.wmf') then
begin
GraphType := gtMetafile;
Stream.Write(GraphType, 1);
with Imagen.Picture.Metafile do
begin
LoadFromFile(OpenPicture.FileName);
Imagen.Picture.Bitmap.SaveToStream(Stream);
end;
end
else if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then
begin
Jpg := TJpegImage.Create;
Jpg.LoadFromFile(OpenPicture.FileName);
Imagen.Picture.Assign(Jpg);
GraphType := gtJpeg;
Stream.Write(GraphType, 1);
Jpg.SaveToStream(Stream);
end;
Stream.Position := 0;
TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).LoadFromStream(Stream);
except
jpg.Free;
Stream.Free;
raise;
end;
jpg.Free;
Stream.Free;
end;
end;
PARA VISULIZAR
procedure TExp700.QueryTraAfterScroll(DataSet: TDataSet);
var
Stream: TMemoryStream;
Jpg: TJpegImage;
GraphType: TGraphType;
begin inherited;
Jpg := nil;
Stream := nil;
try
Stream := TMemoryStream.Create;
TBlobField(QueryTra.FieldByName('EXPTRA_TEXTO')).SaveToStream(Stream);
if Stream.Size > 0 then
begin
Stream.Position := 0;
Stream.Read(GraphType, 1);
case GraphType of
gtBitmap: Imagen.Picture.Bitmap.LoadFromStream(Stream);
gtIcon: Imagen.Picture.Icon.LoadFromStream(Stream);
gtMetafile: Imagen.Picture.Metafile.LoadFromStream(Stream);
gtJpeg:
begin
Jpg := TJpegImage.Create;
Jpg.LoadFromStream(Stream);
Imagen.Picture.Assign(Jpg);
end
else
Imagen.Picture.Assign(nil);
end;
end
else
Imagen.Picture.Assign(nil);
except
Showmessage('Non se poido');
Imagen.Picture.Assign(nil);
end;
jpg.Free;
Stream.Free;
end;
El procedimiento de carga funciona correctamente pero el de visualización no carga la imagen en "Imagen", que es un TImage. Llevo todo el día dandole vueltas y no consigo ver que es lo que falla. Me queda la sospecha de que este procedimiento solo funcione con el BDE, ya que en algún sitio he leido algo al respecto.
Alguien puede ayudarme?