Movendo colunas e linhas em um StringGrid.

Escrito em 27 de março de 2009 em Delphi,Programação,VCL/RTL por acidbytes

 

      Na maioria dos componentes Grids, de terceiros, você pode observar que o usuário pode mover colunas e linhas usando o mouse. Aliás, o usuário espera este comportamento de um Grid. Então, como fazer isso usando um TStringGrid?

      Como sempre, se é isso que você estava querendo implantar em seu aplicativo, mais uma vez “seus pobrêma se acabaram-se”,  apresentamos o incrível GridColumnRowMoveitor Tabajara.

      Mais uma vez… mão na massa e chega de enrolação.

      Primeiro de tudo, se você der uma olhada mais aprofundada no componente TCustomGrid você verá que os métodos MoveColumn e MoveRow estão lá, fazem parte do componente, mas eles estão ocultos no TStringGrid, eles são herdados do ancestral TCustomGrid porém não estão acessíveis no descendente, o motivo?? Ora, vai lá saber o que se passa na cabeça dos garotos da Codegear…

      Como resolver esse problema? Simples e fácil, sem maiores complicações, basta fazer uma herança de TStringGrid e redeclarar estes métodos como public.

type
    TNovoGrid = class(TStringGrid)
    public
    procedure MoveColumn(FromIndex, ToIndex: LongInt);
    procedure MoveRow(FromIndex, ToIndex: LongInt);
   end;

   Para implementar estes métodos é muito simples, basta na implementação, chamar o ancestral e passar para ele o comando:

procedure TNovoGrid.MoveColumn(FromIndex, ToIndex: LongInt);
begin
    inherited;
end;

procedure TNovoGrid.MoveRow(FromIndex, ToIndex: LongInt);
begin
    inherited;
end;

     Você não precisa registrar este componente na paleta de componentes. Use o TStringGrid ou qualquer descendente de TCustomGrid normalmente como já faz hoje, e quando você precisar usar estes métodos, simplesmente faça um typecast (conversão de tipos) para a nova classe, e pronto. Veja o exemplo abaixo:

procedure TForm1.Button1Click(Sender: TObject);
begin
       TNovoGrid(StringGrid1).MoveColumn(2, 5);
end;

    Bom, é isso aí, até a próxima.
    www.spectrus.com.br


3 comentários em 'Movendo colunas e linhas em um StringGrid.' »

Assine os comentários usando RSS ou faça um TrackBack para 'Movendo colunas e linhas em um StringGrid.'.

[-]
[+]
Williame Rocha disse,

Em 22 de abril de 2009 às 11:50

Ótima dica!!! Mt útil…

uma pergunta, eu posso clicar e arrastar esta coluna??

 
[-]
[+]
Rodolf Melo disse,

Em 12 de fevereiro de 2010 às 16:32

Prezado,
Não consegui fazer funcionar, devo declarar a classe no código do componente ou no form onde estiver trabalhando?

[-]
[+]
Acidbytes disse,

Em 22 de fevereiro de 2010 às 18:10

A nova classe você declara no form, para poder fazer o type cast.