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 :

Programmation objet: Appel de fonctions communes


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut Programmation objet: Appel de fonctions communes
    Bonjour,

    * Delphi 10.1 update 2 - Firemonkey *

    J'ai plusieurs objets qui sont hérités d'objets visuels comme par exemple:
    - TMyLabel qui hérite de TLabel
    - TMyButton qui hérite de TButton.
    - TMyImage qui hérite de TImage.

    Lors de l'exécution, l'utilisateur peut créer autant d'objets de ces types qu'il le souhaite et les disposer sur une fiche.
    A un moment, j'aimerai appeler une fonction commune à chaque objet mais qui agit différemment suivant le type d'objet donc une fonction qui est déclarée au sein de chaque objet.

    Sous windows, jusqu'à présent, je déclarerai une fonction qui répond à un message (WM_USER+xxx) et ensuite j'appelais sendmessage pour tous les objets de la fiche.

    Sous android ce n'est pas possible.

    J'aimerai savoir si une astuce de la programmation orientée objet permettait de réaliser cela (héritage, interface etc .... )

    merci
    Franck

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Oui, une interface pourrait etre une solution
    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
    IMyInterface = interface
      procedure MyProc;
    end;
     
    TMyLabel = class(TLabel, IMyInterface)
    public
      procedure MyProc; //implementation de myProc pour le label
    end;
     
    ...
     
    var
      itf: IMyInterface;
    begin
      for ctrl in controls do
      begin
        if Supports(ctrl, IMyInterface, itf) then
          itf.MyProc;
      end;
    end;

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Merci quillemouze, j'avais bien essayé les interfaces exactement comme tu l'as indiqué dans ton exemple mais il me manquait cette fonction "Supports" que je ne connaissais pas.

    En revanche, j'ai eu une erreur de compilation: "E2232 L'interface IMyInterface n'a pas d'identification d'interface"

    L'aide indique qu'il faut ajouter un numéro de GUID comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IMyInterface = interface
     ['{EC208F55-F869-41C3-85D4-001399F4B622}']
      procedure MyProc;
    end;
    Le numéro de GUID peut être inséré automatiquement dans le code en pressant les touches [Ctrl] + [Shift] + [G]
    Cela fonctionne très bien même si je n'ai pas tout saisi dans l'utilité d'un GUID.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Implementing Interfaces

    Parce que, si je ne dis pas de bêtises , Delphi rajoute une surcouche aux interfaces COM de Microsoft (<- IUnknown interface pour son petit nom)

    Si tu tripotes un peu Windows (par exemple la base de registre), tu vois pleins de GUID

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Salut

    Si tu tripotes un peu Windows (par exemple la base de registre), tu vois pleins de GUID
    Moralité : dans la base de registre, il suffit de suivre le GUID...

    tchüss

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Oui oui tout à fait j'ai bien vu ces GUID dans la base.
    En tous cas, cela plait visiblement aussi à Android car je l'ai compilé sous Android et ce code fonctionne parfaitement.

    Merci à tous.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Si tu regardes Wiki ou autre, une interface COM, c'est un ensemble d'interfaces COM (déjà au moins iUnknown, et il faut penser héritage)

    Donc, il faut pouvoir les identifier pour prendre la bonne interface : la tienne, celle du décodeur AVI, une d'Internet Explorer ...
    Et sûrement que derrière il y aussi des problématiques de pointeurs (parce qu'il y a le DCOM, le "serveur COM" peut être en réseau) et donc il faut avoir un GUID au lieu dun pointeur.


    Cela fonctionne sous Android parce que c'est une surcouche Delphi. Peut-être que le GUID n'est pas utilisé ou très peu

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

Discussions similaires

  1. Programme faisant appel à des fonctions
    Par bendesarts dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/12/2013, 16h07
  2. [PB 9] Savoir quel objet appelle une fonction
    Par Dark Ryus dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 19/02/2009, 12h24
  3. Réponses: 6
    Dernier message: 12/07/2006, 19h29
  4. [VB]appeler une fonction d'autre programme vb
    Par medbouh dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/03/2006, 11h27
  5. appel des fonctions d'un driver dans un programme en c
    Par richie25 dans le forum Windows
    Réponses: 5
    Dernier message: 10/01/2006, 08h27

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