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

Despertador...


plikts

Pergunta

oi!!!!

Eu tenho uma dpuvidas sobre esse código:

procedure TForm1.FormCreate(Sender: TObject);
begin
RG1.ItemIndex:=0;
LblData.Caption:=FormatDateTime('dddd,dd" de "mmmm" de "yyyy',Date);

end;

procedure TForm1.RG1Click(Sender: TObject);
begin
if RG1.ItemIndex=1 then
Ligado:=True
else
Ligado:=False;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Tecla:=(Key);
if ((Tecla< '0') or (Tecla >'9')) and (Tecla <> ':')
then
begin
Beep;
Key:=chr(0);
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (Edit1.Text <=TimeToStr(Time)) and (Ligado) then
begin
Beep;
end;
LblHoraSys.Caption:=TimeToStr(Time);
end;
end.

Eu gostaria se possível uma explicação sobre ele, por exemplo, porque a variavel Ligado:Boolean armazena True ou False (em TForm1.RG1Click) se RG1.ItemIndex=1e depois é usado em "if (Edit1.Text <=TimeToStr(Time)) and (Ligado) then" o que é verificado, como e usado aki para poder dar Beep??

quando inicia o programa demora um segundo para começar a mostrar a hora, mas se eu aumento o INterval, ai o beep aumenta de velocidade, eu gostaria de saber como faço isso quando o form é criado?? eu já tentei como o form create mas a hora fica estática...

o porque de "<>" em "(Tecla <> ':')" ?

porque Key:=chr(0)??

e porque Tecla:=(Key) sendo q key é uma var???

obrigado!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Eu gostaria se possível uma explicação sobre ele, por exemplo, porque a variavel Ligado:Boolean armazena True ou False (em  TForm1.RG1Click) se RG1.ItemIndex=1e

Para definir se está "ligado" (verdadeiro) ou não (falso). É apenas uma maneira de poder controlar se o "despertador" vai estar ligado ou não.

depois é usado em "if (Edit1.Text <=TimeToStr(Time)) and (Ligado) then" o que é verificado, como e usado aki para poder dar Beep??

Lógica Booleana. Um AND entre dois valores lógicos só retornará um valor lógico verdadeiro se *ambos* os valores forem verdadeiros. Aqui (em um dos posts) tem uma explicação básica sobre isso: http://scriptbrasil.com.br/forum/index.php?showtopic=54869

quando inicia o programa demora um segundo para começar a mostrar a hora, mas se eu aumento o INterval, ai o beep aumenta de velocidade, eu gostaria de saber como faço isso quando o form é criado?? eu já tentei como o form create mas a hora fica estática...

É porque só depois de 1 segundo é que o código do Timer vai ser executado.

o porque de "<>" em  "(Tecla <> ':')" ?

O que é maior ou menor do que algo é... diferente: = (igual), < (menor), > (maior), <> (diferente). Algumas linguagens representam isso como !=, sendo o ! o símbolo de negação (ou seja, não-igual, o que dá no mesmo).

porque Key:=chr(0)??

Para anular a tecla digitada.

e porque Tecla:=(Key) sendo q key é uma var???

Esse "var" ali tem uma outra conotação. Para mais detalhes, vide tópico: http://scriptbrasil.com.br/forum/index.php?showtopic=58176

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

oi!!!

Essas coisas eu já sabia, é q eu não estou conseguindo me expressar, deixa eu tentar de novo:

"Eu gostaria se possível uma explicação sobre ele, por exemplo, porque a variavel Ligado:Boolean armazena True ou False (em TForm1.RG1Click) se RG1.ItemIndex=1e depois é usado em "if (Edit1.Text <=TimeToStr(Time)) and (Ligado) then" o que é verificado, como e usado aki para poder dar Beep?? "

Ligado é uma variavel né? Com o código acima satisfeito vai soar o alarme correto? mas ali esta "Edit1.Text <=TimeToStr(Time)) and (Ligado) then" mas LIgado pode ser true ou false, ele só deve disparar se for true correto???? mas como pe iformado, aonde nesta linha de código? só (Ligado) não tem como definir isso se é true ou false, correto??

é como você disse aki:

"Lógica Booleana. Um AND entre dois valores lógicos só retornará um valor lógico verdadeiro se *ambos* os valores forem verdadeiros." o (Ligado) não é algo como (Ligado=True), ai sim se for true e mais (Edit1.Text <=TimeToStr(Time)) deveria soar, to viajando aki....

o lance do Timer q depois de um segundo ele é executado eu sei, mas eu queria q desde q iniciasse o programa, a hora já etivesse sendo exibida, mas rodando, pois se não tiver em Ttimer (OnTimer) ele não executa...como faço isso??

obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Ligado é uma variavel né?

Sim.

Com o código acima satisfeito vai soar o alarme correto?

Sim.

mas ali esta "Edit1.Text <=TimeToStr(Time)) and (Ligado) then" mas LIgado pode ser true ou false, ele só deve disparar se for true correto????

Sim.

mas como pe iformado, aonde nesta linha de código?

Não entendi o "pe iformado".

só (Ligado) não tem como definir isso se é true ou false, correto??

Sim, claro que tem. Se um if só é executado quando um valor é true, tanto faz eu escrever:

if Ligado=true then
Ou apenas:
if Ligado then
Quando eu faço o primeiro, supondo que o valor de Ligado é true, seria o mesmo que fazer:
if true=true then
E, evoluindo a expressão, chegamos a:
if true then
O que é exatamente a mesma coisa que a segunda forma (if Ligado then). Essa "variável" que temos aqui é a mesma coisa que vemos em expressões matemáticas. Para chegar a um valor final nós não substituímos todas as variáveis por seus respectivos valores? Então, na programação não é diferente.
é como você disse aki: "Lógica Booleana. Um AND entre dois valores lógicos só retornará um valor lógico verdadeiro se *ambos* os valores forem verdadeiros." o (Ligado) não é algo como  (Ligado=True), ai sim se for true e mais (Edit1.Text <=TimeToStr(Time))  deveria soar, to  viajando aki....
Exato, e é o que acontece. Imagine que o resultado de (Edit1.Text <=TimeToStr(Time)) seja false e Ligado seja true. A expressão seria a mesma que:
if false and true then
E, evoluindo ela:
if false then

O que não executaria o if, já que o mesmo exige um valor true para ser executado. Substitua as duas expressões por todas as possibilidades de verdadeiro e falso que você imaginar e realize um and entre elas e você verá que só quando ambas forem true é que o resultado será true e o if será executado.

Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

sim...agora, para finalizar este post, olhe essa parte desse código:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Tecla:=(Key);
if ((Tecla< '0') or (Tecla >'9')) and (Tecla <> ':')
then
begin
Beep;
Key:=chr(0);
end;
end;
porque foi criado depois de Implementation a variável Tecla do tipo Char, sendo que Key é tmb do tipo Char, eu consegui usar só ela, fazendo assim:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key< '0') or (Key >'9')) and (Key <> ':')
then
begin
Beep;
Key:=chr(0);
end;
end;

qual a diferença?

obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0
sim...agora, para finalizar este post, olhe essa parte desse código:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Tecla:=(Key);
if ((Tecla< '0') or (Tecla >'9')) and (Tecla <> ':')
then
begin
Beep;
Key:=chr(0);
end;
end;
porque foi criado depois de Implementation a variável Tecla do tipo Char, sendo que Key é tmb do tipo Char, eu consegui usar só ela, fazendo assim:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key< '0') or (Key >'9')) and (Key <> ':')
then
begin
Beep;
Key:=chr(0);
end;
end;

qual a diferença?

Nenhuma diferença. Apenas, quem quer que tenha criado o código, preferiu atribuir o valor de Key à uma variável chamada Tecla que foi declarada como sendo visível a toda unit (por isso ela está depois do Implementation). Como essa variável é vista por toda a unit, a última tecla digitada permanece nela e poderia ser acessada por outra função (mas acredito que isso não tem uma utilidade definida, neste caso).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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