Predes 0 Denunciar post Postado Janeiro 27, 2010 Bom dia, tenho um laço de repetições até atingir uma condição peso := 0; repeat begin ACBrBAL1.LePeso( TimeOut ); Peso:=StrToFloat(sttPeso.caption); end; until peso <> 0;após o peso ser diferente de 0 eu executo uma série de instruções sql, imprimo etiqueta etc, após executar essas instruções eu gostaria de voltar para esse laço,e verificar novamente se peso é igual a 0, existe essa possibilidade? como faço? Compartilhar este post Link para o post Compartilhar em outros sites
brsamn 0 Denunciar post Postado Janeiro 27, 2010 Se o peso for igual a zero o que deverá ser feito? Compartilhar este post Link para o post Compartilhar em outros sites
Predes 0 Denunciar post Postado Janeiro 27, 2010 Quando é igual a zero ele fica dentro desse laço "Infinito", monitorando a balança até que alguém coloque um peso sobre a balança, então peso será > 0 então irá executar todas as rotinas, depois disso teria que voltar pro laço e ficar monitorando a balança novamente neste laço que poste acima ou em um while peso = 0 do begin ACBrBAL1.LePeso( TimeOut ); Peso:=StrToFloat(sttPeso.caption); if peso > 0 then break; ou algo do tipo Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Janeiro 28, 2010 Cara, existe um monte de possibilidades. Você pode utilizar um timer e não precisa mais deste laço (se este laço estiver fora de uma thread, provavelmente vai fazer o seu programa parar de responder). você pode também utilizar uma máquina de estados ou então combinar os dois. Veja um exemplo com maquina de estados var estado : integer; //estado 0 = aguardando //estado 1 = rodando procedure Form1.Timer1Timer(Sender: TObject); begin if (estado = 0) then begin if (peso <> 0) then estado := 1 end else if (estado = 1) then begin //executa comandos sql, imprime etiqueta, etc if (Peso = 0) then Estado := 0; end; end; o uso de maquina de estados, apenas timer ou thread depende muito de como você quer fazer Compartilhar este post Link para o post Compartilhar em outros sites
Predes 0 Denunciar post Postado Janeiro 28, 2010 Obrigado pela resposta, tentarei utilizar o estado, e posto aqui.A questão é que essa rotina está vinculada a um botão. e gostaria que o usuário pressionasse o botão apenas uma vez pra iniciar o processo, daí em diante ficaria monitorando a balança e pesando os produtos conforme o usuário coloca e retira o produto da balança, sem ter que pressionar o botão novamente entre as pesagens, e só seria interrompido a rotina ao pressionar um botão ex: ESC. ] Por isso achei necessário a utilização de um laço. Vou testar qualquer coisa volto aqui obrigado mais uma vez Compartilhar este post Link para o post Compartilhar em outros sites