Fórum Desenho no DBGrid indicando ordenamento #344704

19/08/2007

0

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

Responder

Posts

19/08/2007

Anorex

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...


Responder

Gostei + 0

20/08/2007

Adriano Santos

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]


Responder

Gostei + 0

29/08/2007

Raserafim

ainda não testei,

mas, desde já, valeu pela dica


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar