Fórum Ajuda com Procedimento envolvendo componente Timer #418597

16/06/2012

0

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 ^^.
Alaides Junior

Alaides Junior

Responder

Posts

16/06/2012

Bruno Leandro

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.
Responder

Gostei + 0

16/06/2012

Marco Salles

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 ???
Responder

Gostei + 0

16/06/2012

Alaides Junior

engraçado que pensei nisto tb amigo, porem, meu label não possue essa propriedade, vou testar com um edit, ja retorno o resultado.....
Responder

Gostei + 0

16/06/2012

Alaides Junior

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!
Responder

Gostei + 0

16/06/2012

Marco Salles

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
Responder

Gostei + 0

16/06/2012

Marco Salles

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar