Créer un event sur une variable

Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
- - Dernière réponse : DeltaFX
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
- 27 mars 2006 à 22:05
'lut bande de jeunes :)
Question : est il possible de créer un evenement (genre OnChange) sur une variable globale, dans mon cas un booléen, dont la portée concerne une form paticulière. ?

En gros, j'ai un bool : reverse, en var globale. Quand "reverse" change,
pour la form 1 faut faire ça ça et ça,
pour la form 2, ce truc ci, ce machin là et surtout ça,
.....

Pour l'instant j'ai un timer par form qui verifie l'etat de ma variable, mais ca fait n timers, et à moins de mettre un intervalle tres court (beaucoup de tours de boucle pour rien), ca me crée des temps de latence ( sans parler de la "précision" des timers.....). Et commander chaque truc a faire directement sans passer par cette variable, c'est mal pratique, dans le sens où je souhaite éviter que mes forms se connaissent (ref dans uses).

Des idées ?.
Afficher la suite 

2 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
Alors non, on ne peu pas faire cela comme ça.

quand on veut declancher une evenement il faut le declancher a la modification, exemple :

Var
MonBool : boolean = false;

procedure DoMonBoolChange;
begin
case MonBool of
true : begin
Form1...
Form2...
end;
false : begin
Form1...
Form2...
end;
end;

function ChangeValueBool(const V : Boolean) : boolean;
begin
if MonBool <> V then begin
MonBool := V;
DoMonBoolChange;
end;
result := MonBool;
end;

il suffirat ensuite d'affecter une valeur a MonBool avec la fonction ChangeValueBool dans les methodes pour declancher le pseudo-evenement DoMonBoolChange...
et cela sans timer.

exemple, ici on verifie que les entrées d'un tableau d'entier sont bien superieur a 25,
si ce n'est pas le cas on modifie MonBool en consequence et on ajuste la valeur
de l'entrée a 25 :

begin
x := 0;
while x < 100 do begin
if not ChangeValueBool((Table[X] >= 25)) then Table[x] := 25;
inc(x);
end;
end;

la modification de MonBool declanche l'evenement et on peu adapter le programme en consequence.
(exemple bidon)

<hr size="2" width="100%">
Commenter la réponse de f0xi
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
0
Merci
Ah. donc pas de bol je vais me retrouver avec une form qui connait forcément les autres, pas glop. Je vais me dépatouiller avec mes différents timers. C'est peut-etre pas un mal, ca va me permettre un filtrage anti rebond. Bon ben a qqch malheur est bon.

Merci Foxi.
Commenter la réponse de DeltaFX