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 :

Envoie d'un message a TOUS les composant d'une form


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Envoie d'un message a TOUS les composant d'une form
    Bonjour,

    Je recherche sans reussite depuis hier a envoyer un message a TOUS les composant d'une form. Je specifie bien TOUS parce que j'ai deja le moyen de broadcaster un message a tous les composants d'une form grace a
    la commande broadcast. Mais les composants contenu par un panel sur la form ne recoivent pas le message.
    Donc je recherche un moyen de faire passer le message a tout les composant de la form meme a ceux contenu dans un panel (aussi a ceux contenu dans un panel de ce panel....)

    Merci de m'avoir suivit jusqu'au bout.
    Et merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Les composants détenus par un autre se trouvent dans la propriété Components, le nombre de composants détenus dans ComponentCount :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      i : integer;
    begin
      for i := 0 to componentCount do
        if components[i] is TWinControl then
          sendMessage((components[i] as TWinControl).Handle,lemessage,wParam,lParam);
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Merci de m'avoir repondu mais... (sans les fautes ..)
    Je vais donner plus de precision parce que je m'appercois que je n'ai pas ete assez precis.

    Voila j'ai une methode broadcastMessage qui permet d'envoyer les messages a toutes les formes de mon program. cette methode est appeler par la methode qui a besoin de faire connaitre quelque chose au reste du programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure BroadcastMessage(var Message); 
     var 
       cnt: integer; 
     begin 
       TMessage(Message).Result := 0; 
       for cnt := 0 to Screen.FormCount - 1 do 
        Screen.Forms[cnt].Broadcast(Message); 
     end;
    Cette methode me permet d'envoyer mes propres messages personalisé à mes besoins ( ils sont toujours munis du result et du Msg, mais le reste est different d'un message standard de window, ils n'ont pas besoin d'etre enregistrer comme ils ne sont pas utiliser par d'autres programmes...)

    Le problem comme je le disais dans mon messsage precedent vient du fais que cette methode passe bien le message à tout les composants de la form mais pas a ceux qui font parti d'un panel ou autre group box (sachant que sa pourai aussi etre un composant dans un sous panel et ainci de suite). Donc de 2 cas de figure (enfin je pense) sois je modifie cette methode sois je cree un nouveau composant panel adapter qui ferai passer ces messages a ses compos. Dans le deuxieme cas j'avai penser receptionner les differents message qui m'interresse et d'inserer dans chaque methode qui recois un message un broadcast du message mais cette methode est pas terrible mais marche mais demande de creer une metode pour chaque message et d'y inserer simplement la commande broadcast contenu par les composant TwinControl.

    Esperant avoir ete plus clair sur mon problem.
    Et vous remerciant d'avoir repondu

    A plus

    ChDdV.

  4. #4
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Pourrais-tu réecrire ce message correctement, avec des mots français ? (le premier aussi d'ailleurs, je n'avais pas fait attention)

    Exemples :
    ki -> qui
    ke -> que
    kelkchose -> quelque chose
    g -> j'ai

    etc...

    et après, je te réponds.

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Je suis désolé d'avoir contrarier une regle du forum
    Bonsoir,


    Je suis vraiment désoler d'avoir contrarier une des regles du forum.

    Je n'avai point pris le temps de lire le reglements, de plus je ne m'étais point appercus du professionalisme vers lequel le site tand avec raison.

    Pour ces raisons je ferais plus attention à l'avenir aux messages que je posterais sur le forum.

    Et je remercis Bloon d'avoir tout de meme pris le temps de me lire et de m'avoir fait ce repproche.

    Bonne continuation dans votre travail.


    ChDdV.

  6. #6
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    bon alors pour ton problème, voici une proposition non testée :

    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
    procedure BroadCastMessage(var Message; ctrl : TWinControl);
    var
      i : integer;
    begin
      for i := 0 to ctrl.ControlCount - 1 do
      begin
        ctrl.Controls[i].WindowProc(TMessage(Message));
        if TMessage&#40;Message&#41;.Result <> 0 then Exit;
        // Appel récursif aux contrôles détenus par le contrôle courant
        if &#40;ctrl.Controls&#91;i&#93; is TWinControl&#41; then
          BroadCastMessage&#40;Message,ctrl.Controls&#91;i&#93; as TWinControl&#41;;
        if TMessage&#40;Message&#41;.Result <> 0 then Exit;
      end;
    end;
     
    procedure BroadcastMessageFenetres&#40;var Message&#41;;
    var
      cnt&#58; integer;
    begin
      TMessage&#40;Message&#41;.Result &#58;= 0;
      for cnt &#58;= 0 to Screen.FormCount - 1 do
        BroadCastMessage&#40;Message,Screen.Forms&#91;cnt&#93;&#41;;
    end;
    BroadcastMessageFenetres remplace ta procedure, BroadCastMessage est une adaptation de la fonction Broadcast de TControl. Elle est récursive afin de traiter tous les contrôles, même ceux situés dans un panel.

    Merci pour tes efforts

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 34
    Points : 30
    Points
    30
    Par défaut Merci
    Merci pour cette reponse aussi rapide que interessante. J'aurai jamais penser à utiliser un methode recursive (d'autant que je n'ai pas souvenir d'en avoir implementer une). Comme quoi on apprend tout les jours.
    Je vais l'implementer et te confirmer le resultat obtenu dès que possible. Pour le moment j'ai le cerveau qui fume.

    Encore merci.

    ChDdV.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developpeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 34
    Points : 30
    Points
    30
    Par défaut RE Merci. It's working!
    Bonjour

    Merci Bloon pour ton aide. Je te confirme que ton code marche.

    A plus.

    ChDdV.

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

Discussions similaires

  1. Redimensionner tous les composants d'une fenetre
    Par SeaShell dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 11/04/2008, 18h30
  2. [code] Comment lister tous les éléments d'une form
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/10/2006, 11h23
  3. Réponses: 2
    Dernier message: 06/06/2006, 08h32
  4. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53

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