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 04-12-2006
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 22
adebonis Va por buen camino
mostrar una imagen en un DBGrid

Hola.

¿Alguien sabe cómo mostrar una imagen (.bmp) en un DBGrid según el valor True/False de un campo?

Uso Delphi 5.

Gracias.
Adolfo Bonis
Barcelona
Responder Con Cita
  #2  
Antiguo 04-12-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
pues puedes hacer un campo calculado y asignarle el bmp segun la opcion y ya solo necesitarias un dbgrid que muestre imagenes, el de los JEDI lo hace, entre otros
Responder Con Cita
  #3  
Antiguo 04-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Te pongo un ejemplo usando un DBGrid normal. Este es el evento OnDrawColumnCell del DBGrid:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect; DataCol: Integer;
  Column: TColumn; State: TGridDrawState);
var
  Bmp: TBitmap;
  L, T: Integer;

begin
  // Si es la columna donde deseas poner la imagen...
  if DataCol = 4 then
  begin
    // Seleccionas la imagen a usar según el valor del campo
    if Table1.FieldByName('campo').AsBoolean then
      Bmp := BitmapSi
    else
      Bmp := BitmapNo;

    // Calculas las coordenadas para que la imagen quede centrada en la celda
    L := Rect.Left + (Rect.Right - Rect.Left - Bmp.Width) div 2;
    T := Rect.Top + (Rect.Bottom - Rect.Top - Bmp.Height) div 2;

    // Dibujas la imagen
    DBGrid1.Canvas.Draw(L, T, Bmp);
  end
  else
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Aquí, BitmapSi y BitmapNo serían dos TBitmap creados al inicio con las imágenes que quieras:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  BitmapSi := TBitmap.Create;
  BitmapSi.LoadFromFile('SI.bmp');

  BitmapNo := TBitmap.Create;
  BitmapNo.LoadFromFile('NO.bmp');
end;

y destruidos al final

Código Delphi [-]
procedure TForm1.FormDestroy(Sender: TObject);
begin
  BitmapSi.Free;
  BitmapNo.Free;
end;

// Saludos
Responder Con Cita
  #4  
Antiguo 04-12-2006
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 22
adebonis Va por buen camino
Hola roman.

Va perfecto, pero lo que me pasa es que la imagen se me muestra por encima del texto /True o False.

¿Sabes si hay un sistema para que no se me vea el texto por debajo de la imagen?

Gracias

Adolfo Bonis
Barcelona.
Responder Con Cita
  #5  
Antiguo 04-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si pusiste el código tal cual, creo entonces que lo que faltaría es poner la propiedad DefaultDrawing del DGrid en false.

// Saludos
Responder Con Cita
  #6  
Antiguo 04-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ya he comprobado que eso es lo que faltaba.

Por cierto, la columna sobre la que dibujas no necesariamente debe corresponder a la de un campo. Me explico: si usas el editor de columnas del DBGrid, puedes agregar columnas que no estén asociadas a ningún campo y dibujar sobre ella. De hecho eso fue lo que hice antes y por ello no me había percatado de la sobrescritura. Pero el caso es que haciendo esto puedes preservar el campo original true/false, además de la nueva columna.

// Saludos
Responder Con Cita
  #7  
Antiguo 04-12-2006
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 22
adebonis Va por buen camino
Hola.

Cierto, me faltaba poner DefaultDrawing en false.

Ya sé que soy puntilloso, pero ahora el color de fondo de la fila no me aparece en la columna donde he dibujado la imagen.

Gracias otra vez.
Adolfo Bonis
Barcelona
Responder Con Cita
  #8  
Antiguo 04-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Está bien que seas puntilloso. Si te refieres al color de la selección, prueba poniendo esta modificación al principio del evento:

Código Delphi [-]
  // Si es la columna donde deseas poner la imagen...
  if DataCol = 4 then
  begin
    // Si la celda está seleccionada, escoger el color de selección del sistema
    if gdSelected in State then
      DBGrid1.Canvas.Brush.Color := clHighlight;

    // Dibujar el fondo
    DBGrid1.Canvas.FillRect(Rect);

    // Seleccionas la imagen a usar según el valor del campo
    if Table1.FieldByName('campo').AsBoolean then
      Bmp := BitmapSi
    else
      Bmp := BitmapNo;

    // Calculas las coordenadas para que la imagen quede centrada en la celda
    L := Rect.Left + (Rect.Right - Rect.Left - Bmp.Width) div 2;
    T := Rect.Top + (Rect.Bottom - Rect.Top - Bmp.Height) div 2;

    // Dibujas la imagen
    DBGrid1.Canvas.Draw(L, T, Bmp);
  end
  else
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

// Saludos
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
Mostrar Imagen remota ( desde internet ) MRSAM Internet 4 30-11-2006 22:28:57
Mostrar imagen de un campo binario kiketijuana SQL 0 28-06-2006 01:20:33
Mostrar check en dbGrid Aprendiendo OOP 6 07-12-2005 21:14:51
como mostrar una imagen a base de un componente Nelly Varios 7 01-12-2005 15:50:43
Mostrar mi cursor en una imagen franc28 Varios 4 25-04-2005 19:17:39


La franja horaria es GMT +2. Ahora son las 05:54:59.


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