Arret d'une boucle en delphi ... - Programmation
Marsh Posté le 27-05-2001 à 15:01:15
c'est quoi que tu appelles une acquisition ? car si ton application n'a pas la main pendant qu'elle travaille (utilisation d'un thread) l'evenement de la souris sera ignoré).
Marsh Posté le 27-05-2001 à 16:02:49
Et ben il va chercher des données sur le port centros et les affiches dans une listbox et il fait l'acquisition quand une ligne vaut 0 ou 1 (acquisition période mais ça c'est juste à titre informatif)
Marsh Posté le 27-05-2001 à 19:28:10
voilà le principe (..en C):
int i = 0
bool termine = false
while ( (i < = 1000) && (!termine) )
{
}
quand tu click sur le bouton annuler ou qqchose comme ca pour arreter ca met simplement:
termine = true
Marsh Posté le 27-05-2001 à 20:03:00
il faut aussi que de temps en temps tu traites les messages (clavier, souris, etc...)
par ex :
Code :
|
ici toutes les 50 lignes il traite les messages.
évidemment l'intervalle des processmessages dépend de la durée d'un passage dans la boucle.
Marsh Posté le 27-05-2001 à 22:18:38
Mhhh je comprend vos réponse et pas en faite ce que je comprend pas c'est que pour arreter une boucle il n'existe pas de procédure ou de fonctions bien spécifique pour arreter une boucle ? non ?
C'est pas possible par exemple de creer (comme en html) une encre je m'explique dans la procédure tform1.onclick on met le non de l'encre qui lorsqu'on clique n'impote où sur form1 l'appele et vu que celle ci serait après le boucle ne la ferait plus justement ? je rêve là non ?
Marsh Posté le 28-05-2001 à 11:06:34
Dans le OnClick de ta form, tu mets ton boolean à True:
procedure TForm1.FormClick(Sender: TObject);
begin
Stop := True;
end;
et dans ta boucle, tu peux faire comme ça :
while (i < nb_boucles) do
begin
Application.ProcessMessages;
Inc(i);
if (Stop) then
Break;
end;
ou comme ça, moins bourrin :
while ((i < nb_boucles) and not(Stop)) do
begin
Application.ProcessMessages;
Inc(i);
end;
[edit]--Message édité par Zero Cool--[/edit]
Marsh Posté le 28-05-2001 à 11:26:24
La solution proposee par endi, antp, zcool et les autres est non seulement la bonne solution mais la seule : lorsque t'entre ds une boucle et que tu veux en sortir par une action exterieure (click sur un bouton ou autre) il faut de tps en temps donner la main par un ProcessMessage, modifier une var booleenne ds un OnClick par ex at au retour du ProcessMessage verifer cette var et sortir si elle est fausse.
voila.
Marsh Posté le 28-05-2001 à 18:23:22
Ben justement c'est ce qu'il me falait car j'avais bien réussi à mettre pour que ça s'arrete mais l'acquisition continuait encore mais je vais essayer ça sinon merci
Marsh Posté le 27-05-2001 à 14:37:45
Oui donc voilà j'ai un programme qui lance une acquisition (nombre d'acquisition choisi par l'utilisateur jusqu'à 1000) mais voilà disont qu'il ne veut plus en faire 1000 trop long et il veut arreter maintenant comment on fait pour faire ça donc arreter une boucle ?
Cela doit ce faire lorsqu'on clique avec la souris sur form1 (donc partout) .