Delphi Brasil
Seja bem-vindo (a) ao Delphi Brasil,aqui você encontrará dicas,tutoriais e etc.
Por favor,registre-se para obter o maior proveito possivel do fórum.
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Conectar-se

Esqueci minha senha

Parceiros

Codígo em Loop.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Codígo em Loop.

Mensagem por LD__ em Sex Jan 07, 2011 8:29 pm

Bom Queria fazer um programa em Delphi cujo uma parte do codígo ficasse em loop até o usuário cliquar em um certo botão, e ele clique em outro o codigo volte a ficar em loop, e outro ainda que faria a leitura da váriavel em loop no tal codígo num dado momento.

Sei que o Delphi é basicamente orientado a eventos, pois bem, toda vez que coloco o codígo pra ficar em loop, o formulário desaparece e por conta disto ele não dá atenção a nenhum outro evento, tem como evitar isto??? Será que seria necessário o uso de Threads?? se for aonde encontro um bom material sobre threads??

Se puder me passar o local (Evento) que devo colocar o codígo a ficar em loop, poderia me informar eu agradeço.



LD__
Membro
Membro

Mensagens : 4
Data de inscrição : 07/01/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por sargita em Sab Jan 08, 2011 1:17 pm

Loops



Loops - Em várias situações de uma aplicação precisamos executar uma instrução repeditas vezes. Para tanto usamos estruturas chamadas loop. Em Delphi temos três estruturas de loop:

While ... Do - Irá executar as instruções contidas no bloco Begin ... End enquanto a expressão boleana retornar True (Verdadeiro).

Sintaxe:
Exemplo

While do
Begin
Instrução-1 ;
Instrução-2 ;
End;

While x<9 do
Begin

End;



For - O loop for no Pascal baseia-se estritamente em num contador, o qual pode ser aumentado ou diminuído cada vez que o loop for executado. O contador é inicializado, e o loop irá se repetir enquanto o contador não chegar ao fim da contagem. O seu formato básico é:


Sintaxe:
Exemplos

For contador := inicio to fim do
Begin
Comandos;
End;



Ex. aumentando:

K := 0;
For i:=1 to 10 do
K := K + i;

Ex. diminuindo:

K := 0;
For i:=10 downto 1 do
Begin
K := K + i;
End;

A utilização dos marcadores de início e fim do loop (Begin e End), e considerada opcional, se o loop for executar apenas um único comando. O for ainda pode ser encadeado, ou seja um for dentro do outro.

Repeat Until - é um comando de repetição que não possui controle de um contador e que testa a condição depois de executar o loop. Este loop irá se repetir até que a condição seja verdadeira. A sua forma básica é:

Sintaxe:
Exemplo
Repeat
Comandos;
Until condição

I:=10;
J:=0;
Repeat
I := I -1;
J := J + 1;
Until J>I;

No caso do repeat, as regras do for para os marcadores de início e fim do loop e a do encadeamento, também são válidas.

Vamos ao exemplo com For:



Objetos do Programa
Objeto
Propriedade
Observação
Form1
Caption = Exemplo Loops
ListBox1
Name = Lista_numeros
Button1
Caption = &Sair
Name = btn_sair Use o simbolo & no caption do objeto para criar uma tecla de atalho para o mesmo
Button2 Caption = &Iniciar
Name = btn_iniciar

Dois cliques no botão iniciar e digite o seguinte código:

procedure TForm1.btn_iniciarClick(Sender: TObject);
var i: integer;
begin

lista_numeros.Clear ;
for i := 1 to 15 do
Begin
lista_numeros.Items.Add( inttostr(i) );
end;

end;

Exercícios:

1) Refaça o exemplo acima com While/Do

2) Refaça o exemplo acima com Repeat/Until

3) Faça um programa que imprima todos os números pares entre 7 e 46, use For

4) Quanto é a soma de todos os números impressos no exercício anterior

5) Antes de testar o exemplo abaixo simule no seu caderno o que irá sair na List Box

procedure TForm1.btn_iniciarClick(Sender: TObject);
var i: integer;
var linha: string;
begin
lista_numeros.Clear ;
for i := 1 to 10 do
Begin
linha := inttostr(i) + ' x 3 = '+ inttostr(i * 3) ;
lista_numeros.Items.Add(linha);
end;

end;

6) Refaça o programa do exercício anterior para todos os números entre 1 e 10

sargita
Membro
Membro

Mensagens : 10
Data de inscrição : 17/12/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por LD__ em Seg Jan 10, 2011 1:25 pm

Sargita, já sei o que é um Loop, for, While ,Repeat, Label, Goto, o meu problema é adequar ele a eventos, por que no Delphi um codígo só executado somente quando ocorre um evento assim como você passou no exemplo do evento cliclar no botão.Very Happy

O que quero é que o loop não impeça de verificar se outros eventos aconteceram, por que até onde sei enquanto um loop está em execução, o delphi não consulta outros eventos até o loop (ou o codígo do evento que se tornou verdadeiro) terminar, e eu queria que o loop continuasse e o delphi permitisse ler outros eventos enquanto isto.Exclamation

Quero, um botão para iniciar o loop, um botão Que funciona durante o loop e um botão que finalize o loop, por que estária fazendo um loop que usa eventos para iniciar e parar, mais um evento que não afeta o loop.

é como se eu tivesse fazendo um Keylogger, só que não é um keylogger, nem de longe algo que possa ser malicioso.

O meu problema é com os eventos, por que tenho um código aqui e sua logica se baseia num loop e que um evento que inicia este loop e um outro tipo de evento que virtualmente "interrompe este loop" quando a condição de saida é falsa, e quando é verdadeira sai do modúlo que possua esta lógica para o programa principal. o codígo aqui roda perfeitamente em Turbo-Pascal, adaptado o pseudo-codígo ele funciona perfeitamente quando traduzido pro Turbo C++, mas quando se trata do Delphi o Detalhe que o codígo fica intimamente ligado aos eventos que pertecem me deixa nesta situação de dificuldade.confused

Querem que passe o pseudo-codígo para facilitar??

LD__
Membro
Membro

Mensagens : 4
Data de inscrição : 07/01/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por sargita em Seg Jan 10, 2011 6:06 pm

Vc pode criar um timer...e colocar o comando nele e no interval o tempo q quer q repita...
no botao ligar vc coloca:
timer1.enable=true
e no desligar:
timer1.enable=false..
assim ele ficara repetindo..tipo um lopp..poren nao vai impedir o uso de outros botoes...
spois postarei com mais calma...


sargita
Membro
Membro

Mensagens : 10
Data de inscrição : 17/12/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por LD__ em Ter Jan 11, 2011 4:45 pm

Testei o Timer para (meu caso aqui) números pequenos parece servir. Very Happy

Mas para números muito grandes tem que ser Threads mesmo. Laughing

Dei uma pesquisada, achei também excelente exemplo sobre Threads.

Ainda vou avaliar qual é a melhor opção se é o Timer ou Threads.

Muito Obrigado. Questão Resolvida.

LD__
Membro
Membro

Mensagens : 4
Data de inscrição : 07/01/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por sargita em Qua Jan 12, 2011 2:24 am

olha, quem me ensinou sobre o timer é uma pessoas que trabalha ha anos com isso...especializado em delphi.Acho q ele me passaria o melhor metodo de fazer isso..mas ai eu nao sei....
E tem como fazer um botao q liga e desliga..hehe...
Cria um botao e coloca esse comando:
Código:
timer1.enable=true := timer1.enable=false
(acho q e isso msm)

sargita
Membro
Membro

Mensagens : 10
Data de inscrição : 17/12/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Codígo em Loop.

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum