StringGrid no Delphi e Lazarus: Guia Completo

O StringGrid é um dos componentes mais versáteis e populares da VCL (Visual Component Library) do Delphi e LCL (Lazarus Component Library) do Lazarus . Ele oferece uma interface de grade personalizável, muito utilizada para exibir e manipular dados tabulares. Neste artigo, vamos explorar como trabalhar com o StringGrid, desde a configuração básica até personalizações e funcionalidades mais avançadas.
Definindo o Número de Colunas e Linhas
Para começar, o StringGrid permite definir facilmente o número de colunas e linhas. Esses elementos formam a base da grade e podem ser ajustados com as propriedades ColCount (para colunas) e RowCount (para linhas).
Exemplo:
StringGrid1.ColCount := 5; // Define 5 colunas StringGrid1.RowCount := 10; // Define 10 linhas
No exemplo acima, definimos uma grade com 5 colunas e 10 linhas.
Definindo Cabeçalhos e Linhas/Colunas Fixas
O StringGrid também permite fixar colunas e linhas, criando uma espécie de cabeçalho para os dados. As propriedades FixedCols e FixedRows controlam o número de colunas e linhas fixas, respectivamente. Linhas e colunas fixas não rolam com o restante da grade, sendo muito úteis para exibir títulos e rótulos.
Exemplo:
// Definindo cabeçalhos para as colunas StringGrid1.Cells[0, 0] := 'ID'; StringGrid1.Cells[1, 0] := 'Nome'; StringGrid1.Cells[2, 0] := 'Idade'; StringGrid1.Cells[3, 0] := 'Cidade'; StringGrid1.Cells[4, 0] := 'País';
Neste caso, a primeira coluna e a primeira linha são fixas, e o conteúdo da célula na posição [0, 0] será exibido como o cabeçalho. Em adicional, colocamos cabeçalhos para todas as colunas, sempre utilizando [Índice da coluna, 0].
Personalizando Cores
O StringGrid permite alterar a cor das células para destacar dados importantes ou melhorar a estética da aplicação. Isso é feito através do evento OnDrawCell, onde podemos personalizar a aparência de cada célula individualmente.
Exemplo:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
{ Personalizando Cores }
if (ARow = 0) then
begin
StringGrid1.Canvas.Brush.Color := clBtnFace; // Cabeçalho com fundo cinza claro
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);
end
else
if (ACol = 0) then
begin
StringGrid1.Canvas.Brush.Color := clBtnFace; // Coluna 0 com fundo cinza claro
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);
end;
end;
Personalizações e Curiosidades
Além das funções básicas, o StringGrid oferece uma vasta gama de personalizações, permitindo que você crie grades totalmente adaptadas às suas necessidades.
Edição de células
O StringGrid permite a edição direta das células, ativando a propriedade Options e habilitando goEditing.
StringGrid1.Options := StringGrid1.Options + [goEditing]; // Habilita a edição
Exibindo imagens nas células
Outra curiosidade interessante é que é possível exibir imagens dentro das células. Para isso, é preciso capturar o evento OnDrawCell e desenhar a imagem utilizando o Canvas.
Exemplo:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
Img: TBitmap;
begin
if (ACol = 1) and (ARow = 1) then
begin
Img := TBitmap.Create;
try
Img.LoadFromFile('caminho_da_imagem.bmp');
StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, Img);
finally
Img.Free;
end;
end;
end;
Scroll automático
Em tabelas grandes, o StringGrid permite a rolagem automática para células específicas utilizando o método TopRow.
StringGrid1.TopRow := 5; // Rola para a linha 5
Remover Linhas
Para remover um registro (linha) de um StringGrid no Delphi / Lazarus, basta reduzir o número de linhas (RowCount) e realocar os dados, caso necessário. Uma técnica comum é “mover” as linhas subsequentes para cima e ajustar a quantidade de linhas.
Aqui está um exemplo de como remover uma linha selecionada:
Exemplo de Código para Remover uma Linha no StringGrid:
procedure TForm1.RemoverLinha(StringGrid: TStringGrid; Linha: Integer);
var
i, j: Integer;
begin
// Verifica se a linha está dentro do intervalo válido
if (Linha >= 0) and (Linha < StringGrid.RowCount) then
begin
// Move os dados das linhas seguintes para cima
for i := Linha to StringGrid.RowCount - 2 do
for j := 0 to StringGrid.ColCount - 1 do
StringGrid.Cells[j, i] := StringGrid.Cells[j, i + 1];
// Reduz o número de linhas
StringGrid.RowCount := StringGrid.RowCount - 1;
end;
end;
Como Usar:
Chame o método RemoverLinha passando o StringGrid e o número da linha que você deseja remover. Por exemplo, para remover a linha selecionada atualmente:
procedure TForm1.ButtonRemoverClick(Sender: TObject); begin RemoverLinha(StringGrid1, StringGrid1.Row); // Remove a linha selecionada end;
Explicação:
- O código verifica se a linha a ser removida está dentro dos limites válidos.
- Usa dois loops para “mover” os dados das linhas subsequentes para cima, substituindo a linha removida.
- Reduz o número de linhas (
RowCount), removendo efetivamente a última linha.
Este método é útil para manter a integridade da grade após a remoção de uma linha.
Adicionando uma Linha
Neste exemplo vamos adicionar um registro no StringGrid
procedure TForm1.BtnAdicionarLinhaClick(Sender: TObject); var vID : Integer; begin StringGrid1.RowCount := StringGrid1.RowCount + 1; vID := StringGrid1.RowCount - 1; StringGrid1.Cells[0, vID] := vID.ToString; // Coluna "ID" StringGrid1.Cells[1, vID] := 'Pessoa ' + IntToStr(vID); // Coluna "Nome" StringGrid1.Cells[2, vID] := IntToStr(20 + vID); // Coluna "Idade" StringGrid1.Cells[3, vID] := 'Cidade ' + IntToStr(vID); // Coluna "Cidade" StringGrid1.Cells[4, vID] := 'País ' + IntToStr(vID); // Coluna "País" end;
Conclusão
O StringGrid é um componente poderoso e altamente personalizável disponível tanto no Delphi quanto no Lazarus. Com ele, você pode criar desde grades simples até interfaces complexas de manipulação de dados. Desde definir o número de colunas e cabeçalhos até personalizar cores e implementar ordenação, o StringGrid oferece flexibilidade para atender a várias necessidades de desenvolvimento.
Explore essas funcionalidades e adapte o StringGrid para enriquecer suas aplicações com interfaces dinâmicas e interativas!
💬 Gostou do que aprendeu sobre o String Grid?
Agora queremos saber a sua opinião! 📊💡
Deixe nos comentários o seu ponto de vista sobre esse componente e como você utiliza ele em seus projetos.
Vamos trocar ideias e enriquecer o debate! 💬👇
📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩💻 🔍✨
Até o próximo post. Valeu! 👋📖
#Delphi #Lazarus
#Programação
#StringGrid #DesenvolvimentoDeSoftware
#VCL #ComponentesDelphi
#DicasDeProgramação #DevLife
#Coders #Desenvolvimento
#GiovaniDaCruz
Foi o melhor artigo sobre StringGrid que já li até hoje.