Ver la Versión Completa : Mostra Blob como imagen
Tengo una tabla access a donde le cargue imagenes en un campo blob sin problemas. Pero como puedo hacer para que cuando cargo la tabla en un DBGrid, me visualice directamente la imagen y no que me figure [BLOB] en dicho campo.
Alguien me puede dar una mano?
Saludos y Gracias
lucero_chivas
28-05-2007, 19:48:17
Bueno, lo que yo hago es quitar la columna de imagen del Grid y creo aparte un DBImage..... el cual lo ligo con el campo de la tabla donde esta guardada la imagen....
No se si te sirva o era algo diferente lo q buscabas
En realidad lo que quiero es mostrar la imagen dentro de la misma celda, son bmp no mas grandes que un icono. Haciendolo como me sugeris, me funciona, ya lo habia probado, utilizando un DBControlGrid tambien, pero lo que quiciera es poder pintar la imagen dentro de la misma celda u otra cualquira.
Saludos
Hice esto, pero no me dibuja la imagen adentro de la celda, y no se por que me sale este error
[Warning] Unit2.pas(824): Variable 'icono' might not have been initialized
El cual solucione, cambiando a FALSE el DefaultDrawing del DBGrid, pero aun asi no me dibuja la imagen dentro de la celada
procedure TFormSubclases.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
var icono: TBitmap;
begin
if Field.Name = 'Icono' then
begin
try
icono:= Tbitmap.Create;
icono.Assign(TBlobField(Field));
(Sender as TDBGrid).Canvas.FillRect(Rect);
(Sender as TDBGrid).Canvas.Draw(Rect.left+3,Rect.Top+1, icono);
finally
icono.free;
end;
end
else
(Sender as TDBGrid).DefaultDrawDataCell(Rect, Field, State);
end;
Saludos
casacham
30-05-2007, 02:40:16
Lee tu respuesta en este hilo --> http://www.clubdelphi.com/foros/showthread.php?t=41768
Lee tu respuesta en este hilo --> http://www.clubdelphi.com/foros/showthread.php?t=41768
Lo lei detenidamente, pero la solucion que me ofrece no es la que busco, ya que yo poniendo un DBImage o un Timage linkado al campo blob, visualizo la imagen sin problema alguno. Lo que yo quiero es pintar esa imagen en una celda del DBGrid donde se visualizan los registros, sin necesidad de tener que poner un DBImage o un Timage.
Saludos
roman
30-05-2007, 08:29:18
Acabo de probar tu código practicamente sin modificaciones y me ha funcionado bien. La única diferencia sería en la comparación:
if Field.Name = 'Icono' then
que yo pongo como
if Field.FieldName = 'Icono' then
Name es el nombre de la componente TField y no el nombre del campo. Así que yo creo que el único problema es ése, la condición nunca se cumple de manera que todo se dibuja tal cual.
// Saludos
Roman, yo lo acabo de probar otra vez, y no me dibuja nada, de hecho ni siquiera me muestra los demas datos, y me vuelve a salir que la variable icono no puede inicializarse. No se que puede ser, que estoy haciendo mal.
La imagen la cargo asi
procedure TLocal.Button1Click(Sender: TObject);
var
MS : TMemoryStream;
begin
MS := TMemoryStream.Create;
MS.LoadFromFile('c:\a.bmp');
SQL.SQL.Clear;
SQL.SQL.Add('INSERT INTO unidades (icono) VALUES(:PFOTO)');
SQL.Parameters.ParamByName('PFOTO').LoadFromStream(MS,ftBlob);
// o bien (pruebo ambas, creo que no hay diferencia pero por si acaso)
// SQL.ParamByName('PFOTO').LoadFromStream(MS,ftBlob);
SQl.ExecSQL;
MS.Free;
QUnidades.Close;
Qunidades.Open;
end; // del procedure
y el procedimiento para que se dibujen es este
procedure TLocal.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var icono: TBitmap;
begin
if Field.FieldName = 'Icono' then
begin
try
icono:= Tbitmap.Create;
icono.Assign(TBlobField(Field));
(Sender as TDBGrid).Canvas.FillRect(Rect);
(Sender as TDBGrid).Canvas.Draw(Rect.left+3,Rect.Top+1, icono);
finally
icono.free;
end;
end
else
(Sender as TDBGrid).DefaultDrawDataCell(Rect, Field, State);
end;
Pero ni se dibuja la imagen en la celda, ni me muestra los datos de cualquier otro campo. La propiedad DefaultDrawing esta en False. Pero me sigue saliendo:
[Warning] Unit2.pas(824): Variable 'icono' might not have been initialized
Porque??, lo que pienso es que al no coincidir el FieldName, no se crea, por lo que tampoco puede destruirse, a lo que voy, es porque? si en mi tabla tengo el campo icono como ObjetoOLE, y me figura como BLOB.
Saludos
Volvi a hacer todo de nuevo, y me sigue sin funcionar, como hiciste para que te funcionara? me podrias poner algo de codigo? tal vez asi me de cuenta.
Saludos
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.