Fórum Ajuda com Procedimento envolvendo componente Timer #418597
16/06/2012
0
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
Curtir tópico
+ 0Posts
16/06/2012
Bruno Leandro
Gostei + 0
16/06/2012
Marco Salles
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
16/06/2012
Alaides Junior
Gostei + 0
16/06/2012
Alaides Junior
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
16/06/2012
Marco Salles
todos nos estamos aqui com o objetivo de aprender ...
e esta sera a primeira de muitas dpuvidas que viraõ (eu acho)
[]sds
Gostei + 0
16/06/2012
Marco Salles
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
Clique aqui para fazer login e interagir na Comunidade :)