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

Langage Delphi Discussion :

Intercepter l’évènement d'un autre composant


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut Intercepter l’évènement d'un autre composant
    Bonjour
    Dans le cadre de la création d'un composant, celui-ci est lié à un autre composant. Pour faire simple, disons qu'un TImage modifié est lié à un Grid.

    Je souhaiterais lors d'une modification sur la Grid, que mon composant (TImage) soit informé de cette modification.

    J'ai dans un 1er temps pensé à lier le OnChange de ma Grid à une procedure incluse dans mon TImage OnGridChange et j'ai fait comme suit.

    Dans le TImageModifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [...]
    MonGridLié.Onchange := OnGridChange
    [...]
     
    TImageModifié.OnGridChange(....)
    begin
    //?? ici comment redonner la main au composant Grid, une sort de Inherited
    end;
    Mon soucis est le suivant, comment ensuite libérer l’évènement pour que l'utilisateur puisse lui aussi utiliser le Grid.Onchange ?

    Je ne pense pas utiliser la bonne méthode pour faire ce que je veux, auriez vous une idée pour m'éclairer un peu. Peut être l'utilisation d'un système de hook évènement, mais je ne vois pas trop comment l'articuler.
    En écrivant cela je me demande si l'utilisation du TApplication.OnMessage ne serait pas la bonne solution, à condition d'arriver à isoler le message... ce qui n'est pas gagné, je vais fouiller cette piste.
    [Edit]Humm, Message windows, représente des messages externes à l'appli qui lui sont transmis par windows, ici ça n'est pas le cas...[/Edit]


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    alors en effet sous Delphi les évènements sont uniques, tu ne peux pas avoir deux OnChange

    si tu veux avoir une image liée à une grid sans utiliser OnChange (c'est quoi ce composant Grid avec un OnChange ?!) tu dois dériver ta grid pour quelle traite deux évènements OnChange ou qu'elle invoque une méthode du TImage qui lui serait associé par une propriété TImage.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    D'accord, merci, donc je n'ai plus qu'a dériver ma Grid.

    En fait J'utilise un composant que j'ai créé (enfin je suis dessus depuis des lustres...) qui me permet de tracer des flèches accompagnées de cercles contenants un indice numérique, ça ressemble à ce que l'on peut voir sur une vue éclaté d'un matériel, chaque pièce est repéré par un cercle numéroté avec une flèche qui pointe la pièce en question.
    Un listing se crée dans la partie TNextGrid, j'ai choisi de faire cette interaction au niveau de mon composant et du coup maintenant je suis embêté pour gérer les modifications apportées a la grid qui doivent affecter mon composant...

    Ça donne ça


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    ok, tu peux aussi partir sur une solution plus générique en ajoutant des méthodes à ta grille

    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
     
    procedure TGrid.AddListener(Sender: TListener);
    begin
      FListener.Add(Sender);
    end;
     
    procedure TGrid.RemoveListener(Sender:TListener);
    begin
      FListener.Remove(Sender);
    end;
     
    procedure TGrid.Notify(Event: TEvent);
    var
      i : Integer;
    begin
      for i := 0 to FListener.Count - 1 do
         TListener(FListener[i]).Notify(Event);
    end;
    le principe est ici de garder une liste des objet à notifier en cas d'évènement (peut-être un seul dans ton cas)

    si tu ne peux pas forcer un ancètre TListener à tes composant à notifier, tu créer un dériver TListener qui fait référence au composant :
    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
     
    type
      TImageListener = class(TListener)
      private
        FImage: TImage;
      public
        procedure Notify(Event: TEvent); override; 
      end;
     
    procedure TImageListener.Notify(Event: TEvent);
    begin
      if Event = evChange then
        with FImage do
          ...
    end;
    je te laisse imaginer à quel moment invoquer les différents méthodes présentées
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Si je comprend bien, ça revient a faire le même style de gestion que pour TControl.Notification. Je vais regardé si ça convient à mes attentes.
    Sinon je changerais peut être mon fusil d'épaule pour intégré le code spécifique dans le code de mon application plutôt que dans mon composant. A bien y réfléchir, je veux toujours "encapsulé" les fonctions dans un composant dérivé, mais finalement, si celui ci n'a pas vocation à être réutilisé... Le seul avantage reste l’allègement du code de l'appli principale...

    Merci pour tes réponses rapides.
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Frequence processeur par rapport aux autres composants
    Par black is beautiful dans le forum Composants
    Réponses: 7
    Dernier message: 02/02/2006, 19h08
  2. [Image] scintillement lors déplacement sur autre composant
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 21
    Dernier message: 07/12/2005, 09h27
  3. Indy ou Autre composant internet avec une appli Console
    Par Oregon09 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 13/11/2005, 05h07
  4. Réponses: 2
    Dernier message: 25/03/2005, 09h23
  5. Assembleur sur AMD et Intel (et autres composants)
    Par Asmod_D dans le forum Assembleur
    Réponses: 4
    Dernier message: 23/10/2004, 12h57

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