DBGrid - colocando imagem no título da gride

Top  Previous  Next

type

  TTesteGrid = class(TCustomGrid);  // antes da declaração do TForm

 

 

 

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

  DataCol: Integer; Column: TColumn; State: TGridDrawState);

var

   Bmp : TBitMap;

 

   function GetColsWidth: Integer;

   var

     I : Integer;

   begin

     Result := 0;

     for I := 0 to Column.Index do

       Result := Result + TDBGrid(Sender).Columns.Items[I].Width;

 

     Result := Result + 10 + (Column.Index);

   end;

begin

   //Aqui fazemos o acesso aos membros protegidos da classe TDBGrid

   with TTesteGrid(Sender) do

   begin

     Canvas.Brush.Style := bsClear;

     //Aqui detectamos se a coluna que está sendo desenhada é a que foi clicada

     if Column.Index = 2 then

     begin

       //Criamos a variável Bmp

       Bmp:= TBitMap.Create;

 

       with Bmp do

       begin

         //configuramos que a cor transparente será branco

         TransparentColor := clWhite;

         Transparent      := True;

         TransparentMode  := tmAuto

       end;

 

       try

         //Checamos se a variável Ordem está em branco

//       if Length(Ordem) = 0 then

         //Se está em branco, é ordem crecente então passamos

         // à variável Bmp a segunda figura do ImageList1

         ImageList1.GetBitmap(1, Bmp);

//       else

         // se não passamos a primeira

//       ImageList1.GetBitmap(0, Bmp);

 

         //Detectamos se a altura do título é suficiente para por a imagem

         if RowHeights[0] < Bmp.Height+4 then RowHeights[0]:= Bmp.Height+4;

 

         //Desenhamos a imagem no Título

         Canvas.Draw((GetColsWidth-Bmp.Width), (RowHeights[0] - Bmp.Height) div 2, Bmp);

       finally

          //Liberamos a variável Bmp da memória

         Bmp.Free;

       end;

     end

     else

       //Se não é a coluna clicada que está sendo desenhada

       //então usamos o método padrão de desenho do título da coluna

       DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

   end;

end;