IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Envoyer un message a toutes instances d'une class


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 197
    Points : 54
    Points
    54
    Par défaut Envoyer un message a toutes instances d'une class
    Bonjour a tous comment faire pour envoyer un message a toutes les instances d'une Classe donné dans mon programme.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Bon je passerai sur le fait que c'est d'une mauvaise conception admirable ... 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

Discussions similaires

  1. Comment envoyer un message a tout un réseau?
    Par ceroxono dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 29/05/2009, 17h03
  2. Réponses: 2
    Dernier message: 17/04/2009, 15h49
  3. Utilisation de toutes les instances d'une classe dans un while
    Par canaboss dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 28/04/2008, 15h28
  4. Accéder à toutes les instances d'une classe
    Par MrGecko dans le forum Delphi
    Réponses: 15
    Dernier message: 14/05/2007, 00h50
  5. Connaitre toutes les instances d'une classe
    Par miniseb dans le forum Langage
    Réponses: 14
    Dernier message: 09/01/2006, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo