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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 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

  2. #2
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 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
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 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

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

    Heureusement, ton explication fait retomber ma migraine.

    A+

+ 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