Cration et gestion d'vnements

Bonjour,

Je travaille sur un programme dont l’objectif est de dclencher des actions lorsque certains paramtres, dont la valeur est calcule priodiquement par le programme, atteignent un seuil fix par l’utilisateur. J’avais en tte de crer une classe Activite, avec un vnement seuil deux valeurs : la valeur du seuil fix par l’utilisateur et la valeur courante du paramtre. Il “suffirait” alors de comparer ces deux valeurs et de coder les actions raliser dans le handler d’une instance de Activite.seuil

Pour tester le concept, j’ai essay quelque chose de simple et j’ai essay ceci, qui ne fonctionne pas : boucler 10 fois, chaque tour de boucle tirer une valeur de pression entre 100 et 200 et esprer afficher la valeur dans une fentre si la pression est >150 l’aide d’un vnement SP.

1/cration d’une classe Essai avec un vnement SP et une proprit : pression
2/ ajout de Essai1 dans Window1, qui comporte aussi Textfiled1 (qui permet d’afficher la valeur de la pression - fonctionnement pas pas)
3/dans Essai1.SP :

if me.pression >150 then
beep
Msgbox str(me.pression)
end if

4/ dans Window1.open :

dim i as integer
dim r as new random

for i = 1 to 10

essai1.pression = r.InRange(100,200)
TextField1.text = str(essai1.pression)

comme rien ne se passait, j’ai ajouter ceci pour vrifier que j’obtenais bien des valeurs > 150
if essai1.pression>150 then
Msgbox “arrt par prgm”
end if
next

5/ j’ai ensuite essay de “bricoler” avec les actionsource, en ajoutant une proprit action as actionsource Essai. C’est pire que tout, je ne fais qu’obtenir des messages d’erreur, n’ayant trs certainement pas compris le fonctionnement de cet objet. J’ai vu qu’il existait aussi des DataNotifiers qui pourraient tre plus pertinents, puisqu’ils comporteraient, si j’ai bien compris, une vrification d’un changement de valeur

Quelqu’un(e) pourrait-il m’aider ?

Par avance Merci

Patrice

Pourquoi dans l’vnement open de ta fentre.

Crer un timer en mode multiple et une priode 1000, pour la frquence du cycle.

Dans l’vnement action de ton timer, place to code.

Bonjour,

merci pour cette rponse rapide, mais le timer ne rpond pas mon problme, car je travaille sur des variables physiques, telle la pression, dont la variation n’est pas uniquement lie au temps.

“Pourquoi dans l’vnement open de ta fentre.”

C’tait ce que j’ai trouv de plus simple pour vrifier si l’ide fonctionnait : pas besoin de cliquer sur un bouton pour dclencher le programme de tirage alatoire (simulant le rsultat de calculs de pression par exemple) et vrifier ainsi qu’il y a un dclenchement d’action (affichage d’une message box) lorsque la pression dpasse un seuil (150)

Juste un question : qu’est ce au just que 'l’evnement SP" ? Une mthode je prsume, car je ne connat pas d’event SP.

Comment appelez-vous cette mthode ?

Il est parfaitement possible que votre code ne s’excute tout simplement pas.

Bonsoir

l’vnement SP est un vnement que j’ai cr, l’aide de “Ajouter la dfinition d’un vnement” qui s’affiche lorsque je double clique sur la classe gnrale “Essai” que j’ai cre.

Ensuite, plus rien ne se passe

[quote=221649:@Patrice PELLE]Bonsoir

l’événement SP est un événement que j’ai créé, à l’aide de “Ajouter la définition d’un événement” qui s’affiche lorsque je double clique sur la classe générale “Essai” que j’ai créée.

Ensuite, plus rien ne se passe…[/quote]

[quote=221583:@Patrice PELLE]1/création d’une classe Essai avec un événement SP et une propriété : pression
2/ ajout de Essai1 dans Window1, qui comporte aussi Textfiled1 (qui permet d’afficher la valeur de la pression - fonctionnement pas à pas)
3/dans Essai1.SP :[/quote]

L’event SP ne prendra place que si vous le déclenchez dans la classe avec quelque chose comme :

RaiseEvent SP

Qui peut être mis par exemple dans l’evènement Open de la classe. Toutefois, créer un Event n’est nécessaire que dans certains cas. Il serait mille fois plus simple de créer une méthode sur la classe, que vous appelez ensuite en la préfixant du nom de l’instance.

Par exemple, créez une méthode PSM sur Essai, et insérez votre code dedans.

Puis, sur votre fenêtre, appelez cette méthode avec :

Essai1.PSM

Merci pour votre rponse qui me fait prendre conscience que je me compliquais la vie. Je cherchais en effet viter la batterie de test sur chacun des paramtres chaque tour de boucles, mais j’ai fait une erreur de raisonnement : que ces tests soient en ligne la fin de chaque boucle, dans une mthode globale, un vnement ou une mthode spcifique une classe, ils sont ncessaires. A moi de trouver la faon la plus lgante de simplifier le code.

Si je puis encore abuser, j’ai tent votre suggestion “RaiseEvent SP” dans l’vnement Open que j’ai cr dans Essai (en plus de SP). J’obtiens le message d’erreur suivant “SP” : This item does not exist

Cordialement

Si je puis me permettre, lorsque vous commencez le dévelopement, allez au plus simple. Placez le code dans des events ou des méthodes sur la fenêtre, et ne vous préoccupez pas d’optimiser. Puis, lorsque cela fonctionne, raffinez vos méthodes et la structure. De manière générale, il ne faut jamais chercher à optimiser trop tôt.

Je ne vois pas pourquoi cela ne fonctionnerait pas. Je viens de vérfier ici, et cela fonctionne :

  • Insérer une classe
  • Mettre Super “Rectcontrol”
  • Ajouter Event Definition SP
  • Ajouter l’évènement Open dans classe avec dedans “RaiseEvent SP”
  • Trainer une instance sur la fenête
  • Ajouter à Essai1 le handler d’event SP, avec dedans "MsgBox “SP”

Lorsque le programme est lancé, il affiche la MsgBox comme prévu.

“Je ne vois pas pourquoi cela ne fonctionnerait pas.” : tout btement car j’avais oubli d’attribuer une “superclass” celle que j’avais cre :frowning:

Ce qui m’a donn l’ide d’utiliser un TexteditField et son vnement “textchange”. J’obtiens le rsultat escompt,sans avoir besoin de crer un vnement supplmentaire qu’il faut ensuite grer.

merci pour vos conseils, qui indirectement m’ont amen une solution.

Bien cordialement

Heureux d’avoir pu aider :slight_smile: