Créer un event sur une variable

DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 27 mars 2006 à 10:57
DeltaFX Messages postés 449 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 ?.

2 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 mars 2006 à 20:00
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%">
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
27 mars 2006 à 22:05
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.
0
Rejoignez-nous