O componente DBGrid é muito utilizado pelos desenvolvedores Delphi para apresentar dados de um DataSet para o usuário, seja esses dados resultado de um select no banco de dados, registros temporários, etc.
Neste post irei mostrar como redimensionar as colunas do DBGrid. Para implementar essa rotina, iremos utilizar o evento OnResize do Form.
Antes:
Depois:
Abra o Delphi e crie um novo projeto através do menu File -> New -> VCL Forms Application - Delphi, e altere as propriedade do Form:
Caption = REDIMENSIONAR AS COLUNAS DO DBGRID JUNTO COM O FORM
Name = Frm_Principal
Position = poDesktopCenter
Agora, iremos criar uma tabela temporária para armazenar os dados que serão apresentados no BDGrid.
Para criar uma tabela temporária, vamos utilizar o componente TClientDataSet, disponível na paleta Data Access do Delphi (Tool Palette -> Data Access: TClientDataSet). Adicione-o no formulário e altere o nome para cdsTemporario.
Adicione também um TDBGrid disponível na paleta Data Constrols do Delphi (Tool Palette -> Data Constrols: TDBGrid), um TDataSource disponível na paleta Data Access (Tool Palette -> Data Access: TDataSource) e altere suas propriedades conforme baixo:
PROPERTIES DBGRID1:
Align = alClient
DataSource= DataSource1
PROPERTIES DATASOURCE1:
DataSet = cdsTemporario
De um duplo-clique no cdsTemporario para abrir o Fields Editor (Editor de Campos). Para adicionar um novo campo, clique com o botão direito dentro da janela Fields Editor e selecione a opção New Field.
Uma nova janela (New Field) será aberta para preencher as propriedades do campo que será adicionado. No nosso exemplo, adicionaremos 5 campos:
Campo Código:
Name: Código
Type: Integer
Field Type: Data
Campo Nome:
Name: Nome
Type: String
FieldType: Data
Campo Endereço:
Name: Endereço
Type: String
FieldType: Data
Campo Cargo:
Name: Cargo
Type: String
FieldType: Data
Campo Salário:
Name: Salário
Type: Float
FieldType: Data
Após terminar de adicionar os campos, feche o Fields Editor. Clique com o botão direito no cdsTemporario e selecione a opção Create DataSet.
Pronto! Já temos uma tabela temporária criada, agora vamos adicionar os campos do cdsTemporario ao DBGrid.
De um duplo-clique no BDGrid, irá aparecer uma nova janela, clique com o botão direito do mouse e escolha a opção Add All Fields, para adicionar todos os campos do cdsTemporario ao DBGrid.
Agora que já configuramos os componentes, vamos criar uma procedure para incluir os registros no cdsTemporario.
Acesse o código do Form através do menu View -> Toggle Form/Unit ou pressionando F12.
Na seção private declarations adicione o código abaixo:
private
{ Private declarations }
procedure PopularClientDataSet(Cod: Integer, Nome, Endereco, Cargo: String, Salario: Double);
Com o cursor posicionado na mesma linha da procedure, pressione CTRL + SHIFT + C, para criar a estrutura da procedure.
Deixe o código PopularClientDataSet da seguinte forma:
procedure TFrm_Principal.PopularClientDataSet(Cod: Integer, Nome, Endereco, Cargo: String, Salario: Double);
begin
cdsTemporario.Append;
cdsTemporario.FieldByName('Código').AsInteger := Cod;
cdsTemporario.FieldByName('Nome').AsString := Nome;
cdsTemporario.FieldByName('Endereço').AsString := Endereco;
cdsTemporario.FieldByName('Cargo').AsString := Cargo;
cdsTemporario.FieldByName('Salário').AsFloat := Salario;
cdsTemporario.Post;
end;
Crie também a procedure RedimensionarDBGrid na seção private conforme abaixo.
private
{ Private declarations }
...
procedure RedimensionarDBGrid(dbg: TDBGrid);
Deixe o código RedimensionarDBGrid da seguinte forma:
procedure TFrm_Principal.RedimensionarDBGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.Count;
for idx := 0 to dbg.Columns.Count - 1 do
dbg.Columns[idx].Width :=
(dbg.Width - dbg.Canvas.TextWidth('AAAAAA')) div TSize
end
else
for idx := 0 to dbg.Columns.Count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.Count);
SetLength(Asize, dbg.Columns.Count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.Count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.Count;
// adiciona a largura da coluna indicada do cursor
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end;
Volte para o modo Design (F12), clique na barra de título do formulário para selecioná-lo.
De um duplo-clique no evento onCreate do formulário (Object Inspector -> Guia Events: onCreate), e adicione o código abaixo:
procedure TFrm_Principal.FormCreate(Sender: TObject);
begin
cdsTemporario.Open;
PopularClientDataSet(1, 'Gabriel', 'Rua 02 Cs 100 Qd 01 Novo Mundo', 'Gerente', 9500.00);
PopularClientDataSet(2, 'Cristiano', 'Rua 30 Cs 965 Novo Jardim', 'Auxiliar', 7100.00);
PopularClientDataSet(3, 'Paulo', 'Rua 15 Cs 21 Jardim Primavera', 'Contador', 4500.00);
PopularClientDataSet(4, 'Ana Paula', 'Rua 85 Cs 96 Jardim Primavera', 'Serviços Gerais', 1950.00);
PopularClientDataSet(5, 'Rodrigues', 'Rua 05 Cs 46 Novo Jardim', 'Motoboy', 2410.00);
PopularClientDataSet(6, 'Ana Rosa', 'Rua 37 Novo Mundo', 'Analista de Sistemas', 6720.00);
PopularClientDataSet(7, 'Gerson', 'Rua 03, Cs 44 Porto', 'Serviços Gerais', 1950.00);
PopularClientDataSet(8, 'Roberto', 'Rua 56 Cs 97 Santa Maria', 'Programador', 5930.00);
PopularClientDataSet(9, 'Maria', 'Rua 65 Cs 259 Novo Paraíso', 'Porteiro', 2460.00);
PopularClientDataSet(10, 'Sophia', 'Rua 72 Cs 76 Centro', 'Assistente de RH', 3995.00);
end;
Com o código acima, ao criar o formulário será adicionado os registros ao cdsTemporario.
Agora, acesse o evento OnResize do formulário e coloque a chamada para a procedure RedimensionarDBGrid.
procedure TForm1.FormResize(Sender: TObject);
begin
RedimensionarDBGrid(DBGrid1);
end;
Salve as alterações (File -> Save All), coloque o nome uPrincipal para Unit e Principal para o nome do projeto.
Pronto, execute a aplicação (menu Run -> Run ou Pressione F9) e veja o resultado.
Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】
Download
Neste post irei mostrar como redimensionar as colunas do DBGrid. Para implementar essa rotina, iremos utilizar o evento OnResize do Form.
Antes:
Depois:
Abra o Delphi e crie um novo projeto através do menu File -> New -> VCL Forms Application - Delphi, e altere as propriedade do Form:
Caption = REDIMENSIONAR AS COLUNAS DO DBGRID JUNTO COM O FORM
Name = Frm_Principal
Position = poDesktopCenter
Agora, iremos criar uma tabela temporária para armazenar os dados que serão apresentados no BDGrid.
Para criar uma tabela temporária, vamos utilizar o componente TClientDataSet, disponível na paleta Data Access do Delphi (Tool Palette -> Data Access: TClientDataSet). Adicione-o no formulário e altere o nome para cdsTemporario.
Adicione também um TDBGrid disponível na paleta Data Constrols do Delphi (Tool Palette -> Data Constrols: TDBGrid), um TDataSource disponível na paleta Data Access (Tool Palette -> Data Access: TDataSource) e altere suas propriedades conforme baixo:
PROPERTIES DBGRID1:
Align = alClient
DataSource= DataSource1
PROPERTIES DATASOURCE1:
DataSet = cdsTemporario
De um duplo-clique no cdsTemporario para abrir o Fields Editor (Editor de Campos). Para adicionar um novo campo, clique com o botão direito dentro da janela Fields Editor e selecione a opção New Field.
Campo Código:
Name: Código
Type: Integer
Field Type: Data
Campo Nome:
Name: Nome
Type: String
FieldType: Data
Campo Endereço:
Name: Endereço
Type: String
FieldType: Data
Campo Cargo:
Name: Cargo
Type: String
FieldType: Data
Campo Salário:
Name: Salário
Type: Float
FieldType: Data
Após terminar de adicionar os campos, feche o Fields Editor. Clique com o botão direito no cdsTemporario e selecione a opção Create DataSet.
Pronto! Já temos uma tabela temporária criada, agora vamos adicionar os campos do cdsTemporario ao DBGrid.
De um duplo-clique no BDGrid, irá aparecer uma nova janela, clique com o botão direito do mouse e escolha a opção Add All Fields, para adicionar todos os campos do cdsTemporario ao DBGrid.
Agora que já configuramos os componentes, vamos criar uma procedure para incluir os registros no cdsTemporario.
Acesse o código do Form através do menu View -> Toggle Form/Unit ou pressionando F12.
Na seção private declarations adicione o código abaixo:
private
{ Private declarations }
procedure PopularClientDataSet(Cod: Integer, Nome, Endereco, Cargo: String, Salario: Double);
Com o cursor posicionado na mesma linha da procedure, pressione CTRL + SHIFT + C, para criar a estrutura da procedure.
Deixe o código PopularClientDataSet da seguinte forma:
procedure TFrm_Principal.PopularClientDataSet(Cod: Integer, Nome, Endereco, Cargo: String, Salario: Double);
begin
cdsTemporario.Append;
cdsTemporario.FieldByName('Código').AsInteger := Cod;
cdsTemporario.FieldByName('Nome').AsString := Nome;
cdsTemporario.FieldByName('Endereço').AsString := Endereco;
cdsTemporario.FieldByName('Cargo').AsString := Cargo;
cdsTemporario.FieldByName('Salário').AsFloat := Salario;
cdsTemporario.Post;
end;
Crie também a procedure RedimensionarDBGrid na seção private conforme abaixo.
private
{ Private declarations }
...
procedure RedimensionarDBGrid(dbg: TDBGrid);
Deixe o código RedimensionarDBGrid da seguinte forma:
procedure TFrm_Principal.RedimensionarDBGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.Count;
for idx := 0 to dbg.Columns.Count - 1 do
dbg.Columns[idx].Width :=
(dbg.Width - dbg.Canvas.TextWidth('AAAAAA')) div TSize
end
else
for idx := 0 to dbg.Columns.Count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.Count);
SetLength(Asize, dbg.Columns.Count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.Count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.Count;
// adiciona a largura da coluna indicada do cursor
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end;
Volte para o modo Design (F12), clique na barra de título do formulário para selecioná-lo.
De um duplo-clique no evento onCreate do formulário (Object Inspector -> Guia Events: onCreate), e adicione o código abaixo:
procedure TFrm_Principal.FormCreate(Sender: TObject);
begin
cdsTemporario.Open;
PopularClientDataSet(1, 'Gabriel', 'Rua 02 Cs 100 Qd 01 Novo Mundo', 'Gerente', 9500.00);
PopularClientDataSet(2, 'Cristiano', 'Rua 30 Cs 965 Novo Jardim', 'Auxiliar', 7100.00);
PopularClientDataSet(3, 'Paulo', 'Rua 15 Cs 21 Jardim Primavera', 'Contador', 4500.00);
PopularClientDataSet(4, 'Ana Paula', 'Rua 85 Cs 96 Jardim Primavera', 'Serviços Gerais', 1950.00);
PopularClientDataSet(5, 'Rodrigues', 'Rua 05 Cs 46 Novo Jardim', 'Motoboy', 2410.00);
PopularClientDataSet(6, 'Ana Rosa', 'Rua 37 Novo Mundo', 'Analista de Sistemas', 6720.00);
PopularClientDataSet(7, 'Gerson', 'Rua 03, Cs 44 Porto', 'Serviços Gerais', 1950.00);
PopularClientDataSet(8, 'Roberto', 'Rua 56 Cs 97 Santa Maria', 'Programador', 5930.00);
PopularClientDataSet(9, 'Maria', 'Rua 65 Cs 259 Novo Paraíso', 'Porteiro', 2460.00);
PopularClientDataSet(10, 'Sophia', 'Rua 72 Cs 76 Centro', 'Assistente de RH', 3995.00);
end;
Com o código acima, ao criar o formulário será adicionado os registros ao cdsTemporario.
Agora, acesse o evento OnResize do formulário e coloque a chamada para a procedure RedimensionarDBGrid.
procedure TForm1.FormResize(Sender: TObject);
begin
RedimensionarDBGrid(DBGrid1);
end;
Salve as alterações (File -> Save All), coloque o nome uPrincipal para Unit e Principal para o nome do projeto.
Pronto, execute a aplicação (menu Run -> Run ou Pressione F9) e veja o resultado.
Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】
Download
Legal , este funcionou de primeira , valeus
ResponderExcluir