Fórum Excluir linha e coluna no StringGrid #203735
31/12/2003
0
Alguém sabe como faço para excluir uma linha inteira ou coluna inteira em
um StringGrid e como retornar a linha e coluna em que for dado um duplo clique, parece fácil mas não sei como fazer.
Valeu galera e um feliz ano novo para todos
um StringGrid e como retornar a linha e coluna em que for dado um duplo clique, parece fácil mas não sei como fazer.
Valeu galera e um feliz ano novo para todos
Drogao
Curtir tópico
+ 0
Responder
Posts
31/12/2003
Cdaraujo
Caro amigo,
Já enfrentei um problema semelhante a este e a única maneira de resolvê-lo foi implementando uma estrutura em memória que armazenasse toda as linhas e colunas do StringGrid, assim teria como controlar a deleção não pelo Grid e sim através das minhas lista que estavam em memória. Fazendo isso a cadas duplo clique no StringGrid, tenho uma rotina que limpa os valos do StringGrid e monta novamente, lógico com a linha que foi deletada nas minhas lista.
Espero ter ajudado em sua dúvida!
Atenciosamente,
Daniel Araújo
www.cdinformatica.hpg.com.br
Já enfrentei um problema semelhante a este e a única maneira de resolvê-lo foi implementando uma estrutura em memória que armazenasse toda as linhas e colunas do StringGrid, assim teria como controlar a deleção não pelo Grid e sim através das minhas lista que estavam em memória. Fazendo isso a cadas duplo clique no StringGrid, tenho uma rotina que limpa os valos do StringGrid e monta novamente, lógico com a linha que foi deletada nas minhas lista.
Espero ter ajudado em sua dúvida!
Atenciosamente,
Daniel Araújo
www.cdinformatica.hpg.com.br
Alguém sabe como faço para excluir uma linha inteira ou coluna inteira em
um StringGrid e como retornar a linha e coluna em que for dado um duplo clique, parece fácil mas não sei como fazer.
Valeu galera e um feliz ano novo para todos
Responder
Gostei + 0
31/12/2003
Spider
tenho uma boa para você, porque você naum cria um novo componente StringGrid???
vai o codigo para você:
basta colar no Bloco de Notas, salvar como .pas e instalá-lo, Uma nova Guia será criada com seu novo componente...
ele tem dois procedimentos a mais que um StringGrid normal..
MoveRow(origem,destino);
//move a linha para onde vc indicar
// tipo: grid.moverow(1,2) // move da linha 1 para a linha 2
MoveColumn(origem,destino);
//move a coluna para onde vc indicar
// tipo: grid.movecolumn(1,2) // move da coluna 1 para a coluna 2
DeletaLinha(grid,linha);
//deleta a linha do grid
//tipo grid.deletalinha(grid,2) // deleta a linha 2 do grid
DeletaColuna(grid,coluna);
//deleta a colunaa do grid
//tipo grid.deletacoluna(grid,2) // deleta a coluna 2 do grid
Codigo:
//************** Erique Costa ***************//
unit Grid;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Grids;
type
TGrid = class(TStringGrid)
private
{ Private declarations }
protected
{ Protected declarations }
public
procedure MoveColumn(FromIndex, ToIndex: Longint); //Nos permite mover colunas
procedure MoveRow(FromIndex, ToIndex: Longint); //Nos permite mover linhas
procedure DeletaLinha(Grid:TStringGrid;Arow:LongInt);
procedure DeletaColuna(Grid:TStringGrid;Acol:LongInt);
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Erique´, [TGrid]);
end;
//Estamos invocando o métodos MoveColumn do StringGrid para o nosso TstringGridX
procedure TGrid.MoveColumn(FromIndex, ToIndex: LongInt);
begin
inherited;
end;
//Estamos invocando o métodos MoveRow do StringGrid para o nosso TstringGridX
procedure TGrid.MoveRow(FromIndex, ToIndex: LongInt);
begin
inherited;
end;
Procedure TGrid.DeletaLinha(Grid:TStringGrid;Arow:LongInt);
var i:integer;
begin
if Grid.RowCount>2 then //Se o StringGrid possuir mais de uma linha
begin
TGrid(Grid).MoveRow(ARow,Grid.RowCount); //A linha selecionada é movida para o final do StringGrid
Grid.RowCount:=Grid.RowCount-1
{A última linha do StringGrid, justamente a que foi selecionada e movida para
o final, é deletada, dando uma idéia de todas as celulas se moverem para
cima sem precisar usar for, ou while}
end
else
//Se o StringGrid possuir apenas uma linha os dados somente são apagados
Grid.Rows[Arow].Clear;
end;
Procedure TGrid.DeletaColuna(Grid:TStringGrid;Acol:LongInt);
var i:integer;
begin
if Grid.ColCount>2 then //Se o StringGrid possuir mais de uma coluna
begin
TGrid(Grid).MoveColumn(ACol,Grid.ColCount); //A coluna selecionada é movida para o final do StringGrid
Grid.ColCount:=Grid.ColCount-1
{A última Colunha do StringGrid, justamente a que foi selecionada e movida para
o final, é deletada, dando uma idéia de todas as celulas se moverem para
cima sem precisar usar for, ou while}
end
else
//Se o StringGrid possuir apenas uma coluna os dados somente são apagados
Grid.Cols[Acol].Clear;
end;
end.
vai o codigo para você:
basta colar no Bloco de Notas, salvar como .pas e instalá-lo, Uma nova Guia será criada com seu novo componente...
ele tem dois procedimentos a mais que um StringGrid normal..
MoveRow(origem,destino);
//move a linha para onde vc indicar
// tipo: grid.moverow(1,2) // move da linha 1 para a linha 2
MoveColumn(origem,destino);
//move a coluna para onde vc indicar
// tipo: grid.movecolumn(1,2) // move da coluna 1 para a coluna 2
DeletaLinha(grid,linha);
//deleta a linha do grid
//tipo grid.deletalinha(grid,2) // deleta a linha 2 do grid
DeletaColuna(grid,coluna);
//deleta a colunaa do grid
//tipo grid.deletacoluna(grid,2) // deleta a coluna 2 do grid
Codigo:
//************** Erique Costa ***************//
unit Grid;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Grids;
type
TGrid = class(TStringGrid)
private
{ Private declarations }
protected
{ Protected declarations }
public
procedure MoveColumn(FromIndex, ToIndex: Longint); //Nos permite mover colunas
procedure MoveRow(FromIndex, ToIndex: Longint); //Nos permite mover linhas
procedure DeletaLinha(Grid:TStringGrid;Arow:LongInt);
procedure DeletaColuna(Grid:TStringGrid;Acol:LongInt);
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Erique´, [TGrid]);
end;
//Estamos invocando o métodos MoveColumn do StringGrid para o nosso TstringGridX
procedure TGrid.MoveColumn(FromIndex, ToIndex: LongInt);
begin
inherited;
end;
//Estamos invocando o métodos MoveRow do StringGrid para o nosso TstringGridX
procedure TGrid.MoveRow(FromIndex, ToIndex: LongInt);
begin
inherited;
end;
Procedure TGrid.DeletaLinha(Grid:TStringGrid;Arow:LongInt);
var i:integer;
begin
if Grid.RowCount>2 then //Se o StringGrid possuir mais de uma linha
begin
TGrid(Grid).MoveRow(ARow,Grid.RowCount); //A linha selecionada é movida para o final do StringGrid
Grid.RowCount:=Grid.RowCount-1
{A última linha do StringGrid, justamente a que foi selecionada e movida para
o final, é deletada, dando uma idéia de todas as celulas se moverem para
cima sem precisar usar for, ou while}
end
else
//Se o StringGrid possuir apenas uma linha os dados somente são apagados
Grid.Rows[Arow].Clear;
end;
Procedure TGrid.DeletaColuna(Grid:TStringGrid;Acol:LongInt);
var i:integer;
begin
if Grid.ColCount>2 then //Se o StringGrid possuir mais de uma coluna
begin
TGrid(Grid).MoveColumn(ACol,Grid.ColCount); //A coluna selecionada é movida para o final do StringGrid
Grid.ColCount:=Grid.ColCount-1
{A última Colunha do StringGrid, justamente a que foi selecionada e movida para
o final, é deletada, dando uma idéia de todas as celulas se moverem para
cima sem precisar usar for, ou while}
end
else
//Se o StringGrid possuir apenas uma coluna os dados somente são apagados
Grid.Cols[Acol].Clear;
end;
end.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)