Ajuda com Procedimento envolvendo componente Timer
Olá pessoal, sou um novato programador Delphi, estou usando a versão Xe2.
Estou precisando do auxilio de vocês em uma parte de minha aplicação!
Vamos aos detalhes:
1º - Tenho um Timer denominado tmrPrincipal que a cada 5 segundos escreve em 2 label diferentes, lblNota e lblPerctDaNota.
P: O que ele escreve ?
R: Ele escreve o conteudo de uma função que esta em uma outra unit, a Função é:
*****************************************************
Function GetNota(Numero : Integer) : String;
Var
Xitem : TStrings;
Myst : String;
Begin
Xitem := TStringList.Create;
Xitem.LoadFromFile(TempDir + avaliação.txt);
Myst := Xitem.Strings[Numero];
Result := StringToOleStr(Myst);
Xitem.Free;
End;
End;
*****************************************************
Veja meu Timer Funcionando:
*****************************************************
Procedure TfrmAvaliacao.tmrPrincipal(Sender: TObject);
Begin
lblNota.Caption := Você recebeu nota: + GetFrase(0); // Nota Recebida
lblPerctDaNota.Caption := E obteve: + GetFrase(1) + % de aproveitamento!; // % da Nota
End;
End;
*****************************************************
Bom, ate este ponro a aplicação funciona que é uma beleza, surge agora meu problema,
preciso usar os dados que estão escritos no lbl%Nota para executar ações,
Exemplo:
Se o aluno tem % 80 então
mostre mensagem contendo nota
Eu consigo fazer isto tranquilamente, porem, como descrito anteriomente,
a cada 5 segundos a aplicação envia Nota e %daNota aos respectivos label,
e consequentemente ele manda 1 nova mensagem com o mesmo resultado,
quero que envie a mensagem apenas se mudar os resultados.
Quebrei cabeça de mais ja, gostaria de sugestão de como limpar os dados
e forma que ele não fique reenviando a mesma mensagem.
Acredito que seja simples, mas ja fritei a cabeça com isso ^^.
Estou precisando do auxilio de vocês em uma parte de minha aplicação!
Vamos aos detalhes:
1º - Tenho um Timer denominado tmrPrincipal que a cada 5 segundos escreve em 2 label diferentes, lblNota e lblPerctDaNota.
P: O que ele escreve ?
R: Ele escreve o conteudo de uma função que esta em uma outra unit, a Função é:
*****************************************************
Function GetNota(Numero : Integer) : String;
Var
Xitem : TStrings;
Myst : String;
Begin
Xitem := TStringList.Create;
Xitem.LoadFromFile(TempDir + avaliação.txt);
Myst := Xitem.Strings[Numero];
Result := StringToOleStr(Myst);
Xitem.Free;
End;
End;
*****************************************************
Veja meu Timer Funcionando:
*****************************************************
Procedure TfrmAvaliacao.tmrPrincipal(Sender: TObject);
Begin
lblNota.Caption := Você recebeu nota: + GetFrase(0); // Nota Recebida
lblPerctDaNota.Caption := E obteve: + GetFrase(1) + % de aproveitamento!; // % da Nota
End;
End;
*****************************************************
Bom, ate este ponro a aplicação funciona que é uma beleza, surge agora meu problema,
preciso usar os dados que estão escritos no lbl%Nota para executar ações,
Exemplo:
Se o aluno tem % 80 então
mostre mensagem contendo nota
Eu consigo fazer isto tranquilamente, porem, como descrito anteriomente,
a cada 5 segundos a aplicação envia Nota e %daNota aos respectivos label,
e consequentemente ele manda 1 nova mensagem com o mesmo resultado,
quero que envie a mensagem apenas se mudar os resultados.
Quebrei cabeça de mais ja, gostaria de sugestão de como limpar os dados
e forma que ele não fique reenviando a mesma mensagem.
Acredito que seja simples, mas ja fritei a cabeça com isso ^^.
Alaides Junior
Curtidas 0
Respostas
Bruno Leandro
16/06/2012
Ola a minha sugestao seria armazenar a nota em dois campos, nota e nota anterior por exemplo, ai toda vez que fizer a leitura da nota comparar com a nota anterior, se for igual nao faz nada, se for diferente alterar a nota anterior para o valor da nota e faz o aviso.
GOSTEI 0
Marco Salles
16/06/2012
Então Alaides , esta meio confuso o que vc esta querendo ou esta fazendo
A gente quando começa a programar em Delphi sempre começa do jeito mais fácil , porém conceitualemente o mais errado
é normal isto ... Parece que vc quer posso estar enganado mas se encaixa com o Padrão OBserver
Em outras palavras : Não ligue para mim eu ligo para vc
Porém voltando ao modo estruturado de programar e tb ao modo RAD , não seria o caso de vc utilizar o evento
OnChange do Label ( lbl%Nota ) para executar esta ação
Conforme a sugestão do amigo Bruno (Utilizar a Lógica dele) e tb o evento OnChage (local possivel de fazer esta
comparação) , ai sim tomar essas açoes ??
Precisa do Timer mesmo para isto ???
A gente quando começa a programar em Delphi sempre começa do jeito mais fácil , porém conceitualemente o mais errado
é normal isto ... Parece que vc quer posso estar enganado mas se encaixa com o Padrão OBserver
Em outras palavras : Não ligue para mim eu ligo para vc
Porém voltando ao modo estruturado de programar e tb ao modo RAD , não seria o caso de vc utilizar o evento
OnChange do Label ( lbl%Nota ) para executar esta ação
Conforme a sugestão do amigo Bruno (Utilizar a Lógica dele) e tb o evento OnChage (local possivel de fazer esta
comparação) , ai sim tomar essas açoes ??
Precisa do Timer mesmo para isto ???
GOSTEI 0
Alaides Junior
16/06/2012
engraçado que pensei nisto tb amigo, porem, meu label não possue essa propriedade, vou testar com um edit, ja retorno o resultado.....
GOSTEI 0
Alaides Junior
16/06/2012
Impressionante como um pouco de tempo e esforço resolve problemas, ontem fiquei dia todo sem internet!
hoje com menos de 30 minutos sanei meu problema, eu troquei o componente e resolvi o problema,
Juntei a dica de MARCO ANTONIO SALLES e a idéia de BRUNO LEANDRO = PROBLEMA RESOLVIDO!
MARCO ANTONIO SALLES, na veerdade como eu disse ali, eu sou novato no Delphi, eu sou programador VB,
mas procurando melhorar minhas aplicações eu vim aoo Delphi, sou recem formado programmador Delphi pelo SENAC.
Não foi das melhores formações que tive, mas a instituição tem seus meritos!
Detalhe, a aplicação funciona que é uma beleza no VB, vindo ao Delphi enfrentei alguns problemas ^^,
mas com o auxilio de vocês 2 finalizei essa etapa do projeto, um dia compartilho com vocês resultado final
de tal Aplicação, bom dia e bom final de semana!
hoje com menos de 30 minutos sanei meu problema, eu troquei o componente e resolvi o problema,
Juntei a dica de MARCO ANTONIO SALLES e a idéia de BRUNO LEANDRO = PROBLEMA RESOLVIDO!
MARCO ANTONIO SALLES, na veerdade como eu disse ali, eu sou novato no Delphi, eu sou programador VB,
mas procurando melhorar minhas aplicações eu vim aoo Delphi, sou recem formado programmador Delphi pelo SENAC.
Não foi das melhores formações que tive, mas a instituição tem seus meritos!
Detalhe, a aplicação funciona que é uma beleza no VB, vindo ao Delphi enfrentei alguns problemas ^^,
mas com o auxilio de vocês 2 finalizei essa etapa do projeto, um dia compartilho com vocês resultado final
de tal Aplicação, bom dia e bom final de semana!
GOSTEI 0
Marco Salles
16/06/2012
Amigo seje muito bem vindo ao nosso forum e não hesite em perguntar
todos nos estamos aqui com o objetivo de aprender ...
e esta sera a primeira de muitas dpuvidas que viraõ (eu acho)
[]sds
todos nos estamos aqui com o objetivo de aprender ...
e esta sera a primeira de muitas dpuvidas que viraõ (eu acho)
[]sds
GOSTEI 0
Marco Salles
16/06/2012
engraçado que pensei nisto tb amigo, porem, meu label não possue essa propriedade, vou testar com um edit, ja retorno o resultado.....
Hummm;; eu não tinha visto esta sua mensagem.
So para registrar no Delphi (eu não sei em VB) , mas facielmente podemos colocar ou adicionar o evento
onChange para o label
Podemos criar um novo componente com este evento
podemos utilizar o Overload da Vcl onde adiconamos uma classe que contem este evento Sem registrar o Compoenente
ou podemosExtender a funcionalidade da classe TLabel o que chamamos de Class Helpers
GOSTEI 0