Desenho no DBGrid indicando ordenamento

Delphi

19/08/2007

em vários aplicativos quando clicamos em uma coluna de um DBGrid os registros são ordenados. até aí tud bem, consigo fazer.

mas como fazer para exibir um triangulo para cima ou para baixo no título do DBGrid quando a coluna é ordenado?


Raserafim

Raserafim

Curtidas 0

Respostas

Anorex

Anorex

19/08/2007

uso essa ordenação tmb. só q não coloco um triângulo. eu coloco o título da coluna em negrito. se conseguir colocar o triângulo gostaria de saber como fazer...


GOSTEI 0
Adriano Santos

Adriano Santos

19/08/2007

Colegas,

Eu uso um macete aqui. Não está completa a dica, mas só dar uma adaptada.

[list:0055068aa1]
[*:0055068aa1]1. Coloque um TImageList na tela.
[*:0055068aa1]2. Adicione 1 imagem no TImageList.
[*:0055068aa1]3. Declare uma nova classe antes do Type do Form, assim:
[quote:0055068aa1=´Declaração do Type´]
{Classe responsável por obter novas(membros protegidos) propriedades do DBGrid}
type
  TDBGrid = class(DBGrids.TDBGrid);

[/quote:0055068aa1]
[*:0055068aa1]4. No evento onDrawColumnCell do DBGrid digite o código abaixo:
[quote:0055068aa1=´Declaração do Type´]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Bmp: TBitMap;
  R: TRect;
  function GetColsWidth: Integer;
  var
    I: Integer;
  begin
    Result := 0;
    for I := 0 to Column.Index do
    begin
      Result := Result + TDBGrid(Sender).Columns.Items[I].Width;
    end;
    Result := Result + 10 + (Column.Index);
  end;
begin
  {Aqui fazemos o acesso aos membros protegidos da classe TDBGrid}
  with TDBGrid(Sender) do
  begin
    try
      Bmp := TBitMap.Create;
      with Bmp do
      begin
        {configuramos que a cor transparente será branco}
        TransparentColor := clWhite;
        Transparent := True;
        TransparentMode := tmAuto
      end;
      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;
end;

[/quote:0055068aa1]

[/list:u:0055068aa1]


GOSTEI 0
Raserafim

Raserafim

19/08/2007

ainda não testei,

mas, desde já, valeu pela dica


GOSTEI 0
POSTAR