Portée des méthodes (question.... et réponse)
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Bonjour,

Je suis dans ue architecture de portée complexe.
- Fenêtre1 contient instance Objet1 de Classe1
- Classe1 créer une instance Objet2 (dynamique) de Classe2
- Classe1 Crée des méthodes en dynamique (compilation dynamique dans une classe, les procédures deviennent des méthodes)
- Classe2 Apelle une fenêtre Fenêtre2

Par chance, dans mon cheminement, dans le code de Fenêtre2, j'ai un paramètre qui me permet de connaître le nom de fenêtre1.
J'extrapole notre utilisation des règles de nommage pour déterminer le nom de l'instance de Classe1 : fenêtre1.Objet1

Dans Fenêtre2 je veux lancer les méthodes dynamiques de Fenêtre1.Classe1.
A cet effet, j'ai prévu dans Classe1 une méthode d'exécution qui exécute la méthode dynamique selon l'indice (à la compilation j'alimente un tableau dynamique des méthodes avec leur nom...) :
Classe1:_Execute(indice)
RENVOYER ExecuteTraitement(":"+:tTabMthDyn[inidice],trtProcédure)


Ainsi dans Fenêtre2 j'ai :
info(ExécuteTraitement(cNomFen1+".objet1:_Execute",trtPRocedure,Indice)

et là une erreur un peu bête :
Citation :
Erreur à la ligne xxx du traitement Procédure locale Fenêtre1.Procédure.
Vous avez appelé la fonction ExécuteTraitement.
La méthode '_Execute' de la classe 'Objet1' n'est pas globale.
- Code erreur : 2412


Le hic est que Objet1 est une instance et non une classe...

On ne peut faire un ExecuteTraitement qu'au sein de la classe pour appeler ses méthodes (si, si, j'ai des exemples).

En revanche, quand on en passe par l'instance, il faut utiliser le nom de l'instance et de la méthode :
Instance:Méthode(Parametre1)

Comme j'ai une partie ce ce code dans une variable je dois utiliser la compilation dynamique pour pouvoir lancer.

Compile("Exec","PROCEDURE EXEC(cnomFen1,Indice)"+RC+...
"RENVOYER "cNomFen1+".objet1:_Execute("+Indice+")")

suivit de
info(ExécuteTraitement("Exec",trtPRocedure,cNomFen1+Indice)


Ouf, Je confirme si cela marche dans une réponse prochaine.

Contribution le : 26/05/2005 17:02
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Portée des méthodes (question.... et réponse)
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
La solution était simple. Il suffit d'enfiler les portées comme sur un collier de perles.

A la place de la dernière compilation dynamique (non mais...), il suffit dans Fenêtre1 de créer une procédure locale "Execute1" :

// Assure le 'pont' de portée entre Fenêtre2 et Objet1
PROCEDURE Execute1(indice)
RENVOYER Objet1:_Execute(indice)


lancer dans Fenêtre 2
info(ExécuteTraitement(cNomFen1+"Execute1",trtPRocedure,Indice))


Limite : toutes les fenêtres Fenêtre1 qui utilisent Objet1 doivent avoir une procédure "Execute1", ce qui n'est pas une contrainte trop lourde.

La Forge est avec vous, pour l'éternité.






Contribution le : 26/05/2005 18:13
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer


Re: Portée des méthodes (question.... et réponse)
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Le bonheur de trouver une reponse a sa question :)

(j'aime bien celui la)

Contribution le : 27/05/2005 09:55
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2