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 FMX Delphi Discussion :

IsChild et ma fonction presque identique


Sujet :

Composants FMX Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut IsChild et ma fonction presque identique
    Bonjour à tous(tes)

    Comme je n'avais pas vu la fonction FMX.Types.TFmxObject.IsChild j'ai codé une fonction pour savoir si un composant fait partie d'un autre, quel que soit son niveau d'imbrication :

    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
     
    function IsIN(Ctrl: TFmxObject; CtrlParent: TFmxObject): Boolean;
    var
      CParent: TFmxObject;
    begin
      // Si l'objet n'a pas de parent, on renvoie forcément False
      if Ctrl.HasParent = False then
        Exit(False);
     
      CParent := Ctrl.Parent;
      Result := CParent.Equals(CtrlParent);
      while not Result and CParent.HasParent do
      begin
        CParent := CParent.Parent;
        Result  := CParent.Equals(CtrlParent);
      end;
     
    end;
    Dans mes cas d'utilisation, ça fonctionne parfaitement.

    Et puis je "tombe" (aïe) sur la fonction citée plus haut et je la teste.
    Bien qu'elle semble identique dans son fonctionnement à ce que j'ai écrit, elle ne donne pas le résultat escompté.
    Par exemple, un composant à l'intérieur d'un TExpander n'est pas détecté comme faisant partie du TExpander.

    Il y a forcément une raison pour que la fonction Delphi ne donne pas le résultat attendu mais je n'arrive pas à voir pourquoi.

    ok .... Boulet je suis, je l'utilisais à l'envers.
    Pour moi, c'était monObjetEstEnfantDe(objet censé contenir mon objet)
    alors que c'est le contraire.

  2. #2
    Membre actif Avatar de oneDev
    Homme Profil pro
    dilettant
    Inscrit en
    Mars 2019
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2019
    Messages : 213
    Points : 222
    Points
    222
    Par défaut
    Rien à voir avec le fond de la question, mais je n'aime pas ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      CParent := Ctrl.Parent;
      Result := CParent.Equals(CtrlParent);
      while not Result and CParent.HasParent do
      begin
        CParent := CParent.Parent;
        Result  := CParent.Equals(CtrlParent);
      end;
    Je préfère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      repeat
        CParent := CParent.Parent;
        Result  := CParent.Equals(CtrlParent);
      until (Result) or (not CParent.HasParent);

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    C'est une autre façon de le faire mais ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      repeat
        CParent := CParent.Parent;                      // <<< si CParent n'a pas de parent, le nouveau CParent vaut nil
        Result  := CParent.Equals(CtrlParent);       // <<<  du coup il se passe quoi ici ??
      until (Result) or (not CParent.HasParent);

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

Discussions similaires

  1. Fichier <head> presque identiques
    Par isaric dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/03/2012, 11h56
  2. Désérilization XML de deux classes presque identique
    Par Oberown dans le forum Framework .NET
    Réponses: 6
    Dernier message: 07/11/2011, 17h59
  3. [Débutant] Appliquer la meme mise à jour sur 2 projets presque identiques
    Par Naceur84 dans le forum C#
    Réponses: 5
    Dernier message: 10/08/2011, 09h25
  4. Deux lignes presques identiques
    Par franco263 dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/06/2008, 13h16
  5. Réponses: 7
    Dernier message: 12/05/2006, 09h53

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