Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Componentes TStringGrid TStringGrid A aba Additional do C++ Builder oferece o componente de tabela de strings (classe TStringGrid). Componente permite ao usuário adicionar uma tabela ao seu projeto, podendo preencher as células com dados no formato de objetos da classe AnsiString. Propriedades mais importantes RowCount e ColCount – estas propriedades permitem mudar/ler o número de linhas ou colunas que compõem o grid, respectivamente. Cells[col][lin] – representa a string armazenada na célula referenciada pela linha lin e pela coluna col. A primeira linha do grid possui índice 0, bem como a primeira coluna. Propriedades mais importantes Selection – esta propriedade indica a porção do grid que está selecionada, através de um objeto da classe TGridRect. Os atributos Left, Top, Right e Bottom representam, respectivamente, a coluna e a linha da primeira célula da seleção e a coluna e a linha da última célula da seleção. Pode-se impedir que o usuário selecione várias células, mudando-se o valor da subpropriedade goRangeSelect, da propriedade Options para false. FixedRows e FixedCols – permitem “fixar” um determinado número de linhas ou colunas do grid, respectivamente. As células fixas são pintadas em cor diferente e normalmente são utilizadas para a exibição de informações de cabeçalho da tabela. Propriedades mais importantes ScrollBars – Define se as barras de rolagem devem aparecer em ambos os lados (ssBoth), somente na horizontal (ssHorizontal), somente na vertical (ssVertical), ou não devem aparecer (ssNone) GridLineWidth – Define o tamanho de cada linha da grid FixedRows / FixedCols – Ativa (valor em 1) ou desativa (valor em 0) as linhas e colunas fixas (primeira a aparecer) da grid FixedColor – Define a cor das colunas fixas Exemplo de código void __fastcall TForm1::FormCreate(TObject *Sender){ StringGrid1->RowCount = 6; StringGrid1->ColCount = 4; StringGrid1->FixedRows = 1; StringGrid1->FixedCols = 0; StringGrid1->Cells[0][0] = "Coluna 1"; StringGrid1->Cells[1][0] = "Coluna 2"; StringGrid1->Cells[2][0] = "Coluna 3"; //insere a opção ‘goRangeSelect’ na lista de opções // para permitir a selecao de mais de uma celula StringGrid1->Options = StringGrid1->Options << goRangeSelect; TGridRect coords; coords.Left = 1; coords.Top = 1; coords.Right = 2; coords.Bottom = 3; StringGrid1->Selection = coords; } Usados para efetuar a seleção de celulas. Coordenadas correspondem a retangulo delimitado por coordenada superior x coordenada inferior Exemplo de form criado com código anterior Eventos mais importantes OnGetEditMask ocorre quando entramos no modo de edição. Neste momento podemos verificar em qual linha/coluna se encontra o cursor e então, se quiser, poderá especificar uma máscara de edição. Exemplo: void __fastcall TForm1::StringGrid1GetEditMask(TObject *Sender, int ACol, int ARow, UnicodeString &Value) { if (ARow == 1 && ACol == 1) Value = "(999) 999-9999;1;_"; // Telefone if (ARow == 1 && ACol == 2) Value = "99/ 99/9999"; // Data } Eventos mais importantes OnSetEditText ocorre quando saímos do modo de edição. Neste momento podemos manipular a entrada e trocar por um texto equivalente. void __fastcall TForm1::StringGrid1SetEditText(TObject *Sender, int ACol, int ARow, const UnicodeString Value){ if (ARow == 1 && ACol == 2) Label1->Caption = "Valor Digitado: " + Value; } Eventos mais importantes OnSelectCell ocorre quando selecionamos uma célula void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect){ if (ARow == 1 && ACol == 2) Label1->Caption = "Selecionada a celula [1][2]"; }