Imagen de fondo en un StringGrid
Artículo por Club Developers · 31 diciembre 2005
2934 vistas
Veamos el código a usar para poner una imagen de fondo de las celdas blancas de un TStringGrid. La imagen tiene que estar en un Bitmap, pero pudiendo estar perfectamente en un TImage. El procedimiento controla el desplazamiento del fondo de la imagen si se usan las barras de desplazamiento:
MiBitMap es un objeto de tipo TBitMap que tiene que haber sido cargado con la imagen. La imagen tiene que ser suficientemente grande como para cubrir todo el fondo del TStringGrid.
delphi
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var i, j, x, y: Integer; R: TRect; begin with Sender as TStringGrid do With Canvas do begin if gdFixed in State then begin { Las celdas grises siempre se pintan en gris } Brush.Color := clBtnFace; Brush.Style := bsSolid; FillRect(Rect); end else begin if gdSelected in State then begin { las celdas seleccionadas van en azul } Brush.Color := clNavy; Brush.Style := bsSolid; FillRect(Rect); end else begin { buscamos la zona de la imagen a copiar para tener en cuenta el uso de las barras de desplazamiento } x := 0; for i := FixedCols + 1 to ACol do Inc(x, ColWidths [i]); y := 0; for i := FixedRows + 1 to ARow do Inc(y, RowHeights[i]); R.Lef := x; R.Right := x + Rect.Right - Rect.Left; R.Top := y; R.Bottom := y + Rect.Bottom - Rect.Top; { dibujamos una parte de la imagen } CopyRect(Rect, MiBitmap.Canvas, R); Brush.Style := bsClear; End; End; { Selección del color del texto } if gdSelected in State then SetTextColor(Canvas.Handle, clWhite) else SetTextColor(Canvas.Handle, clBlack); { dibujamos el texto usando el API } DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect ,DT_NOPREFIX ); End; end;
MiBitMap es un objeto de tipo TBitMap que tiene que haber sido cargado con la imagen. La imagen tiene que ser suficientemente grande como para cubrir todo el fondo del TStringGrid.