Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Mostrar imagen en DBGrid en C++ (https://www.clubdelphi.com/foros/showthread.php?t=81073)

LuisMiguel 07-10-2012 16:40:31

Mostrar imagen en DBGrid en C++
 
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/show...magen+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:
Código:

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:
Código:

TJPEGImage *foto = new TJPEGImage;
String img="C:\\Users\\Damian\\Pictures\\1.jpg";
foto->LoadFromFile(img);
StringGrid1->Objects[0][0]= foto;

y en el StringGrid1DrawCell
Código:

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

Cita:

Empezado por LuisMiguel (Mensaje 446573)
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:
Código:

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
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
Finalmente con su ayuda logre que funcionara de esta forma.
Código:

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?


La franja horaria es GMT +2. Ahora son las 02:49:11.

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