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 :

Comment indiquer la procédure à utiliser pour un objet ?


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Comment indiquer la procédure à utiliser pour un objet ?
    Bonjour,

    J'ai un treeview comportant des items, pour chacun de ceux ci, je souhaite indiquer quelle procédure est utilisée pour remplir ses descendants.

    J'ai une procédure générale CreerNode qui me sert à créer un noeud et affecter diverses valeurs, j'aimerai lui passer une procédure en plus afin que pour chaque noeud, je sache précisément quelle procédure sert à le remplir. ça me permettra tout simplement de ne rafraichir que les enfants du noeud en question sans avoir à recréer l'arbre en totalité.

    J'ai vaguement essayé de déclarer qq chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Type TMethod = procedure of object;
     
    procedure CreerNode(....; pMethod:TMethod);
    et de l'appeler avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreerNode(...., Proc1)
    Mais ça n'a pas marché, les procédures d'alimentation peuvent aussi avoir différents paramètres (le nombre diffère d'ailleurs suivant les procédures).

    Merci de votre aide,
    Olivier roux

  2. #2
    Membre confirmé
    Avatar de korntex5
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juin 2004
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 405
    Points : 454
    Points
    454
    Billets dans le blog
    1
    Par défaut
    pourquoi ne fais tu pas quelque chose du style

    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 creerNode(...,type:integer);
    var
    ...
    begin
    ...
     case type of
       1:
       begin
         ...
       end;
     
       2:
       begin
        ...
       end;
    ....
    end;
    Que la source soit avec moi!
    Jérôme JEAN-MARAULT

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Méthode utilisée
    En fait, je veux juste stocker la procédure à appeler lors d'un refresh d'un noeud. A partir du noeud passé en paramètre, lLa procédure de refresh récupère la procédure d'alimentation indiquée lors du CreerNode et l'utilise pour rafraîchir uniquement le noeud choisi sans toucher au reste de l'arbre. Je m'en suis sorti en passant le nom de la procédure en chaîne et en faisant dans ma procédure de refresh :
    si Node.ProcedureALancer='XXX' then
    XXX
    end;

    Mais bon, ça oblige à coder toutes les procédures dans des "si" alors que ça aurait été plus propre de le faire façon objet je pense....

    Pas grave ça fonctionne, c'est le principal.
    Merci quand même.
    Olivier Roux

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 152
    Points
    10 152
    Par défaut
    Tu peux le faire assez proprement tout de même avec TMethod (pas celui que tu as défini ci-dessus, mais celui définit par défaut dans System).

    D'abord tu dois définir un type méthode pour chaque type de noeud (pour chaque ensemble de paramètres).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      TCreerNoeudAvecChaine = procedure(Chaine : string) of object;
      TCreerNoeudAvecEntier = procedure(Entier : integer) of object;
      TCreerNoeudAvecChaineEtEntier = procedure(Chaine : string; Entier : integer) of object;
    Ensuite, tu déclares ta procédure CreerNoeud comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure CreerNoeud(..., pMethod : TMethod);
    Dans le corps de la procédure, tu appelles pMethod en la transtypant en fonction du type de noeud à créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure CreerNoeud(..., pMethod : TMethod);
    begin
      ...
      case TypeNoeud of
        NoeudAvecChaine : TCreerNoeudAvecChaine(pMethod)(MaChaine);
        NoeudAvecEntier : TCreerNoeudAvecEntier(pMethod)(MonEntier);
        NoeudAvecChaineEtEntier : TCreerNoeudAvecChaineEtEntier(pMethod)(MaChaine, MonEntier);
      end;
    end;
    Puis tu appelles CreerNoeud de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreerNoeud(..., MonCreerNoeudAvecEntier);
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Intéressant
    Je vais essayé ceci, ça me parait beaucoup plus "propre" !

    Merci

    Olivier Roux

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/07/2014, 13h25
  2. Réponses: 9
    Dernier message: 26/11/2009, 15h30
  3. Réponses: 3
    Dernier message: 07/07/2009, 16h17
  4. comment créer un log file pour chaque objet
    Par inès83 dans le forum Programmation par agent
    Réponses: 4
    Dernier message: 05/07/2008, 21h16
  5. Réponses: 3
    Dernier message: 26/01/2007, 23h41

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