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

Composants VCL Delphi Discussion :

Message interfenêtre


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Message interfenêtre
    Bonjour!

    Je conçoit actuellemennt un simulateur avionique, celui-ci comprend de nombreux instruments de bord, ceux-ci étant répartit chacun sur une forme.

    Lors de l'actualisation des paramètres, je dois mettre à jour les formes affichées uniquement.

    J'aimerais pouvoir ajouter des instruments sans devoir modifier la routine qui met à jour les paramètres de vol.

    Est-il possible que la routine poste un message, indiquant "MISE A JOUR DES PARAMETRES".

    Et les fenêtres instruments affichées, interceptionnent ce message et ce mettent à jour via la lecture de données globales.

    Ceci me permettrait de d'ajouter les instruments en incorporants juste la routine de prise en compte du signal.

    Faut-il créer un nouveau message et une fonction associée?

    J'ai utilisé WM_COPYDATA avec le SystemBroadcastMessage mais cela marche apparament entre applications et pas entre fenêtres d'un même projet!

    Une piste me serait utile!

    Merci d'avance
    L'ordinateur à toujours tort tant que l'on ne trouve pas l'erreur.

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Ce que tu dois faire, c'est implementer le patter 'observer'. (une recherche sur 'observer design pattern' devrait donner plus d'informations).

    En gros, on fait comme ca:

    La classe qui gere les mises a jour contient:
    - une liste de fenetres a mettre a jour
    - une fonction qui appelle fenetre.repaint pour chaque element de cette liste

    Quand tu ajoutes un nouvel instrument, tu ajoutes la form contenant cet instrument a la liste mentionnee ci-dessus, et tu l'enleves quand l'intrument est detruit (pour eviter d'appeler repaint sur un objet detruit, ce qui ne manquera pas de te faire une belle exception).

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Un début de solution :

    1 - On définit le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     const USER_NEWDATA = WM_USER
    Je sais il faut utiliser RegisterWindowMessage

    2 - Le code qui va prévenir toutes les fenêtres de l'application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       for i:= 1 to Application.ComponentCount-1 do
        if Application.Components[i] is TForm then
          SendMessage(TForm(Application.Components[i]).Handle,USER_NEWDATA ,0,0);
    La condition visible sera traitée dans la procédure de fenêtre

    3 - Pour les fenêtres devant être prévenues, il faut ajouter

    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
     const USER_NEWDATA = WM_USER
     
      TForm1 = class(TForm)
        ....
      private
        { Déclarations privées }
        procedure NewData(var msg:TMessage); message USER_NEWDATA ;
       ....
      end;
     
     procedure TForm1.NewData(var msg:TMessage); 
     begin
      .... code à réaliser ....
      inherited;
    end;
    YOUPI, CA MARCHE, on peut ajouter des fenêtres sans modifier la routine d'envoi du message

    Comment réaliser une classe TForm prenant en compte cette méthode et
    pouvant être directement modifiée en conception?

    Merci d'avance!

    -> __gtm__ : je n'ai pu te lire pendant la rédaction de ce message
    L'ordinateur à toujours tort tant que l'on ne trouve pas l'erreur.

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci, pour le principe du pattern observer!

    Heureusement, ton explication fait retomber ma migraine.

    A+
    L'ordinateur à toujours tort tant que l'on ne trouve pas l'erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Message 'Duplicate index entry'
    Par Poulou dans le forum Administration
    Réponses: 13
    Dernier message: 04/05/2004, 14h57
  2. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. A lire impérativement avant de poster un message
    Par ok.Idriss dans le forum Demandes
    Réponses: 0
    Dernier message: 01/05/2002, 18h57

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