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

Delphi Discussion :

Récupérer le nom d'une TObjectList passée en paramètre


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Par défaut Récupérer le nom d'une TObjectList passée en paramètre
    Salut,
    Je veux ajouter un objet dans une TObjectList qui peut être trois types : TPNJSprite, TEnnemiSprite et THeroSprite tous trois ayant la classe TSprite pour ancètre, j'ai 3 TObjectList qui réunissent tous les objets créés selon les 3 type du dessus et j'ai une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function addSprite(List : TObjectList):TSprite
    qui est chargée de m'ajouter un objet de type ancètre TSprite dans la liste spécifiée mais je n'ai pas réussi à récupérer le nom de la liste passée en paramètre.
    J'ai essayé sa :
    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
    function TSpriteManager.AddSprite(List : TObjectList): TSprite;
     begin
      if List = TObjectList(FindComponent('FPNJList')) then
        Result := TPNJSprite.Create(FCanvas,FImages,self,Fback)
      else
      if List = TObjectList(FindComponent('FEnnemiList')) then
        Result := TSprite.Create(FCanvas,FImages,self,Fback)
      else
      if List = TObjectList(FindComponent('FHeroList')) then
        Result := TSprite.Create(FCanvas,FImages,self,Fback);
    
      List.Add(Result);
    
    end;
    mais delphi me met que Findcomponent n'est pas déclaré !? pourtant j'ai bien Classes dans mes uses


  2. #2
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    FindComponent() est une méthode d'instance de classe TComponent. Donc, à priori ton TSpriteManager n'est pas un TComponent.
    Mais peu importe, si ton TSpriteManager à la main sur ces trois listes, pourquoi pas faire come ceci ? :
    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
    function TSpriteManager.AddSprite(List : TObjectList): TSprite;
     begin
      if List = FPNJList then
        Result := TPNJSprite.Create(FCanvas,FImages,self,Fback)
      else
      if List = FEnnemiList then
        Result := TSprite.Create(FCanvas,FImages,self,Fback)
      else
      if List = FHeroList then
        Result := TSprite.Create(FCanvas,FImages,self,Fback);
      else
        raise Exception.Create('Y a un soucis par ici...');
     
      List.Add(Result);
     
    end;

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    FindComponent() est fait pour retourner un pointeur sur un composant (pas un objet) qui a une propriété Name (champ de l'objet)

    si tes 3 listes sont de types différents, tu peux faire :
    if List is TPNJList then ...
    (même si c'est 3 fois TMachin=class(TObjectList)

    si ce n'est pas le cas, et que tes 3 listes sont de même type, c'est fichu !

    mais l'appel à la fonction peut être repensé : passe juste une variable qui dit le type de sprite à créer, si la procédure a accès aux 3 listes
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Findcomponent est une methode de Tcomponent et de ses heritiers (Tpanel, Tform,....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mycomponent:=form1.findcomponent('xxx') ;

  5. #5
    Membre confirmé Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Par défaut
    merci pour vos réponses
    j'ai utilisé la solution neibgr , et sa m'a l'air de marcher (plus d'erreur du compilateur mais je ne peux pas tester les classes sont en chantier)
    et sa m'évite de devoir créer un type supplémentaire à faire passer en paramètre

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/09/2010, 22h32
  2. Nom d'une variable passée en paramètre à une fonction
    Par cata2 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 07/09/2007, 09h17
  3. [javascript]Récupérer le nom d'une image
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2005, 13h56
  4. [Debutant] Récupérer le nom d'une image
    Par Djoul dans le forum Débuter
    Réponses: 4
    Dernier message: 30/05/2005, 09h52
  5. Récupérer le nom d'une base
    Par nic_moq dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/03/2004, 10h50

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