logotipo Blog Giovani Da Cruz
Delphi

StringGrid no Delphi e Lazarus: Guia Completo

6 min de leitura 555 visualizações

Componente TStringGrid no Delphi e Lazarus

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:

  1. O código verifica se a linha a ser removida está dentro dos limites válidos.
  2. Usa dois loops para “mover” os dados das linhas subsequentes para cima, substituindo a linha removida.
  3. 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

 

 

1 comentário

Deixe um comentário

Seu e-mail não será publicado.