PDA

Ver la Versión Completa : Mostrar imagen en DBGrid en C++


LuisMiguel
07-10-2012, 16:40:31
Saludos a todos.
Quisiera poner en una de las filas de un dbgrid una imagen que esta almacenada en una BD, he visto algunos codigos en delphi pero entiendo muy poco de el.
Ejemplo:
http://www.clubdelphi.com/foros/showthread.php?t=38134&highlight=poner+imagen+a+dbgrid

Casimiro Notevi
07-10-2012, 16:54:32
Bien, ¿pero qué problema tienes?, ¿qué es lo que no entiendes? :confused:

LuisMiguel
07-10-2012, 17:04:09
Saludos Casimiro Notevi
El codigo delphi al que le hice referencia!, como dije en el mensaje no entiendo mucho ese lenguaje, los ejemplos que he visto han sido en este lenguaje y no he logrado adaptarlo a lo que quiero

LuisMiguel
07-10-2012, 22:19:29
Estuve tratando de hacerlo de la siguiente forma y me da error:
TImage *Image = new TImage (Application);
Image->Picture->LoadFromFile("C:\\Users\\usuario\\Pictures\\1.jpg");
Image->Stretch=true;
Image->Height=25;
Image->Width=25;
DBGrid11->Canvas->Draw(1, 1, Image);Anteriormente para poner una imagen en un StringGrid hacia lo siguiente:
TJPEGImage *foto = new TJPEGImage;
String img="C:\\Users\\Damian\\Pictures\\1.jpg";
foto->LoadFromFile(img);
StringGrid1->Objects[0][0]= foto;y en el StringGrid1DrawCell
if(StringGrid1->Objects[ACol][ARow]!=0)
{
StringGrid1->Canvas->Draw(Rect.Left+0,Rect.Top+0,(TJPEGImage*)
StringGrid1->Objects[ACol][ARow]);
}Pero no encuentro la solucion para el DBGrid ya que no tiene Objects

ecfisa
08-10-2012, 05:27:28
Saludos a todos.
Quisiera poner en una de las filas de un dbgrid una imagen que esta almacenada en una BD, ...
Hola Luis.

Proba de este modo:

void __fastcall TForm1::DBGrid1DrawColumnCell (TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) {
if (DataCol == X ) { // X = Columna del campo imágen
TPicture *P = new TPicture;
P->Assign(Column->Field);
DBGrid1->Canvas->StretchDraw(Rect, P->Bitmap);
delete P;
}
}


Saludos.

LuisMiguel
08-10-2012, 16:18:08
Saludos ecfisa (http://www.clubdelphi.com/foros/member.php?u=7718)
Probando de la forma que usted dice me sale el siguiente error: Cannot assign a TStringField to a TPicture.

ecfisa
08-10-2012, 18:25:46
Hola Luis.

Es que como te documente en el código el campo (columna) debe ser de tipo imágen. Aparentemente el valor que le das a DataCol apunta a un campo de tipo string.

Saludos.

LuisMiguel
08-10-2012, 21:13:39
Muchas Gracias ecfisa (http://www.clubdelphi.com/foros/member.php?u=7718)
Finalmente con su ayuda logre que funcionara de esta forma.
String Anilla=Form2->ADOQueryMostrarResultado->FieldByName("Anilla")->AsString;
if (DataCol == 0 ) {
TPicture *P = new TPicture;
// P->Assign(Column->Field);
if(Anilla =="Anilla1") {
P->LoadFromFile("C:\\Users\\usuario\\Pictures\\1.jpg");
} else {
P->LoadFromFile("C:\\Users\\usuario\\Pictures\\2.jpg");
}
DBGrid11->DefaultDrawColumnCell(Rect, DataCol, Column, State);

DBGrid11->Canvas->StretchDraw(Rect, P->Graphic);
delete P;
}En ese caso me va poniendo las imagenes en una columna completa, si por el contrario quisiera solo poner una imagen de la siguiente forma: [1][1] [columna][fila], como podria indicarle la fila donde quiero que se pinte?