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
Um comentário:
Acid, para acesso a métodos na área protected só é necessário colocar uma extensão na mesma unit. Ex:
type
TAccessStringGrid = class(TStringGrid);
Só isso já basta pra você acessar os métodos na área protegida.
Nomeclaturas a parte, usasse muito: TAccess..., ou THack...(esse aqui é pros que acham que são maus)
Fora isso o blog ta 100% :)
parabéns e continua.
Postar um comentário