Bonjour a tous comment faire pour envoyer un message a toutes les instances d'une Classe donné dans mon programme.
Version imprimable
Bonjour a tous comment faire pour envoyer un message a toutes les instances d'une Classe donné dans mon programme.
je pense qu'il faut les recenser (liste) à la création (style Create(AOwner)) puis parcourir la liste pour envoyer à chacune
pour récupérer un pointeur sur l'instance dans le create, utiliser EAX :
Code:
1
2
3
4
5
6
7
8
9
10 constructor TMyClass.Create(AOwner: TObjectList); var P: Pointer; begin inherited; asm mov EAX, P // ou dans l'autre sens... end; AOwner.Add(P); end;
Bon je passerai sur le fait que c'est d'une mauvaise conception admirable :aie:... Voici une solution :
Le constructeur de la classe en question va se recenser dans une liste privée de l'unité, et le destructeur va s'en retirer. C'est ce que disait Tourlourou, mais en plus complet.
Et EAX c'est vraiment pas le truc : il existe la référence Self !
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 unit Unit1; uses Contnrs; type TMaClass = class public constructeur Create; destructor Destroy; override; procedure TonMessage(Parametres); class procedure TonMessagePourTous(Parametres); end; implementation var MesObjets : TObjectList; constructor TMaClasse.Create; begin inherited; MesObjets.Add(Self); end; destructor TMaClasse.Destroy; begin MesObjets.Remove(Self); inherited; end; procedure TMaClasse.TonMessage(Parametres); begin end; class procedure TMaClasse.TonMessage(Parametres); var I : integer; begin for I := 0 to MesObjets.Count-1 do TMaClasse(MesObjets[i]).TonMessage(Parametres); end; initialization MesObjets := TObjectList.Create(False); finalization MesObjets.Free; end.