Ir para conteúdo
Fórum Script Brasil
  • 0

duvida com TDBgrid


Blackleaf

Pergunta

Bom, meu professor passou um trabalho cujo eu tenho que fazer uma lista das coisas que consomem energia em minha casa valendo 10 pontos :blink:

Bom para encaxotar os 10 pontos, resolvi surpreendelo com um programa feito por mim, para realizar esse trabalho ;)

Mas quando eu fui ver o DBgrid :wacko: ...

Bom vou logo ao assunto.

Estou precisando de ajuda para montar um seguinte programa:

lógica:

terá quatro colunas, uma a quantidade, outra o nome do equipamento, a potência e o consumo diário. Poderá ser adicionado os respectivos. Depois vai ter um Tbutton que ao ser pressionado realizará o cálculo e dizer o consumo diário de energia a partir dos dados, mais precisamente, quantidade, potencia e consumo diário.

O botão para fazer o calculo eu consigo fazer, mas o ruim é saber como extrair os dados da DBGrid.

Portanto quero saber como monto um programa desse :huh:

Agradeço Muito a quem me ajudar :wub:

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Olha se você utilizar banco de dados para salvar as informações como aparelho, quantidade, consumo diário, etc, fica mais fácil porque ai é só percorrer a tabela fazendo os cálculos.

Caso queira fazer sem banco de dados, você não poderá salvar as informações que digitar servirá apenas para consulta, para saber qual o consumo e pronto.

Adicione no form u os seguinte componentes:

1 - Botão;

1 - Edit;

1 - StringGrid;

Deixe a stringgrid com as seguintes propriedades alteradas:

FixedCols = 0;

Options > goEditing = True;

No OnCreate do form coloque este código:

StringGrid1.Cols[0].Text := 'APARELHO';
  StringGrid1.Cols[1].Text := 'QTDE';
  StringGrid1.Cols[2].Text := 'POTÊNCIA';
  StringGrid1.Cols[3].Text := 'CONSUMO';
Aqui será criado os items que você mencionou. E para calcular coloque este código no OnClick do botão:
procedure TForm1.Button1Click(Sender: TObject);
Var Total : Real;
    Cont, Fim : Integer;
begin
  Cont := 1;
  Fim := StringGrid1.ColCount + 1;
  While Cont < Fim do
  begin
    Total := Total + StrToFloat(StringGrid1.Cells[3,Cont]);
    Cont := Cont + 1;
  end;
  Edit1.Text := FloatToStr(Total);
end;

Compile e veja que já irá aprecer os items na primeira linha, nas linhas abaixo digite os valores desejados.

Acredito que isso possa te ajudar.

Abraços

Editado por Vivendo&Aprendendo
Link para o comentário
Compartilhar em outros sites

  • 0

Olá

Dei uma mudada no exemplo e acho que agora resolve o seu problema, faça o seguinte:

No Evento OnCreate coloque esse código:

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cols[0].Text := 'APARELHO';
  StringGrid1.Cols[1].Text := 'QTDE';
  StringGrid1.Cols[2].Text := 'POTÊNCIA';
  StringGrid1.Cols[3].Text := 'CONSUMO';
  StringGrid1.Cols[4].Text := 'TOTAL';
end;
Veja que ele cria mais uma coluna na tabela, logo você deverá alterar a propriedade ColCount da stringgrid para 5; No OnClick do botão calular coloque esse código:
procedure TForm1.BtnCalcularClick(Sender: TObject);
Var Total, TotalGeral, Linha, Coluna, Fim, Qtde, Consumo, Potencia : Integer;
begin
  Fim := StringGrid1.RowCount + 1;
  Linha := 1;
  While Linha < Fim do
  begin
    Coluna := 1;
    If StringGrid1.Cells[1,Linha] = '' Then
      StringGrid1.Cells[1,Linha] := '0';
    If StringGrid1.Cells[2,Linha] = '' Then
      StringGrid1.Cells[2,Linha] := '0';
    If StringGrid1.Cells[3,Linha] = '' Then
      StringGrid1.Cells[3,Linha] := '0';
    Qtde := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Coluna := Coluna + 1;
    Potencia := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Coluna := Coluna + 1;
    Consumo := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Total := (Qtde * Potencia * Consumo);
    StringGrid1.Cells[4,Linha] := IntToStr(Total);
    TotalGeral := TotalGeral + StrToInt(StringGrid1.Cells[4,Linha]);
    Linha := Linha + 1;
  end;
  Edit1.Text := intToStr(TotalGeral);
end;
Esse código passa campo por campo, linha por linha e coluna por coluna fazendo os cálculos; E fiz um botão limpar campos, no OnClick desse outro botão coloque esse código:
procedure TForm1.BtnLimparClick(Sender: TObject);
Var Fim, Linha, Coluna, FimCol : Integer;
begin
  If Application.MessageBox('Tem certeza que deseja apagar as informações?','Aviso!',MB_ICONQUESTION+MB_YESNO)= 6 Then
  begin
    Fim := StringGrid1.RowCount + 1;
    FimCol := StringGrid1.ColCount;
    Linha := 1;
    Coluna := 0;
    While Coluna < FimCol Do
    begin
      While Linha < Fim do
      begin
        StringGrid1.Cells[Coluna,Linha] := '';
        Linha := Linha + 1;
      end;
      Coluna := Coluna + 1;
      Linha := 1;
    end;
  end;
end;

Acho que agora resolveu o seu problema, mas caso queira o exemplo que fiz me adiciona no MSN que te mando.

aslalexandre@hotmail.com

Abraços

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, eu dei uma estudada melhor e percebi que o calculo estava errado, deveria ser assim:

Total = Qtde * Potencia*consumo*30 (que são o numero de dias médio de um mês) \ 1000 (para transformar em kW) * 0,48 (cotação por kWh)

Desculpe estar te encomodando novamente ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

Então o evento OnClick do botão calcular passa a ficar dessa forma:

procedure TForm1.BtnCalcularClick(Sender: TObject);
Var Total, TotalGeral : Real;
    Linha, Coluna, Fim, Qtde, Consumo, Potencia : Integer;
begin
  Fim := StringGrid1.RowCount + 1;
  Linha := 1;
  While Linha < Fim do
  begin
    Coluna := 1;
    If StringGrid1.Cells[1,Linha] = '' Then
      StringGrid1.Cells[1,Linha] := '0';
    If StringGrid1.Cells[2,Linha] = '' Then
      StringGrid1.Cells[2,Linha] := '0';
    If StringGrid1.Cells[3,Linha] = '' Then
      StringGrid1.Cells[3,Linha] := '0';
    Qtde := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Coluna := Coluna + 1;
    Potencia := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Coluna := Coluna + 1;
    Consumo := StrToInt(StringGrid1.Cells[Coluna,Linha]);
    Total := (((Qtde * Potencia * Consumo * 30) / 1000) * 0.48);
    StringGrid1.Cells[4,Linha] := FloatToStr(Total);
    TotalGeral := TotalGeral + StrToFloat(StringGrid1.Cells[4,Linha]);
    Linha := Linha + 1;
  end;
  Edit1.Text := FloatToStr(TotalGeral);
end;

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou certinho! Mas antes de agradecer só quero pedir + 1 coisa, na verdade é uma duvida, eu criei um botão que adiciona mais colunas, para se poder botar mais objetos com o seguinte código:

procedure TForm1.Button3Click(Sender: TObject);
var
Quan: integer;
begin
 Quan := StringGrid1.RowCount;
 StringGrid1.RowCount := Quan + 1;

if Quan = 30 then
 ShowMessage('Uau! Você tem muitos equipamentos em casa!');
end;

Mais só que quando eu adiciono + uma coluna (de cima pra baixo), automaticamente adiciona um espaço do lado direito oO.

O que eu faço?

Editado por Blackleaf
Link para o comentário
Compartilhar em outros sites

  • 0

Ele faz isso porque o tamanho dele está definido para o mesmo tamanho de todas as colunas e linhas, ai quando você cria mais linhas ele cria uma barra de rolagem ao lado direito e embaixo e por isso aumenta esse espaço ai.

Mude a propriedade ScrollBars da StringGrid para ssVertical, isso fará com que sempre que as linhas ultrapassem o espaço da stringgrid ele crie esta barra lateral e não fará mais o espaço.

Aumente um pouco a largura da stringgrid para que caiba as colunas e um espaço que caiba a barra de rolagem que será criada.

O botão para criar as barras ficará da seguinte forma:

procedure TForm1.Button1Click(Sender: TObject);
var
Quan: integer;
begin
  Quan := StringGrid1.RowCount;
  StringGrid1.RowCount := Quan + 1;
  if Quan = 30 then
    ShowMessage('Uau! Você tem muitos equipamentos em casa!');
end;

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...