[WinDev 10] Construire dynamiquement un nom d'objet
11 réponses
Jean-Luc Baptiste
Bonjour,
Je souhaite créer des noms objets dynamiquement, j'ai essayé les
indirections mais sans succés. Hors, il y a quelques temps j'y étais
arrivé (alzheimer surement ;-))
Si quelqu'un a la solution...
Exemple
i est un entier
pour i=1 à 10
Nomobjet+i est un objet maclasse
fin pour
pour i=1 à 10 Nomobjet+i est un objet maclasse fin pour
Pour i=1 à 10 {"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse Fin
non ?
a+
Ben non ;-))
Jean-Luc Baptiste
Gilles Guédikian a écrit :
Jean-Luc Baptiste a pensé très fort :
Jean Passe a écrit :
Salut,
pour i=1 à 10 Nomobjet+i est un objet maclasse fin pour
Pour i=1 à 10 {"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour construire la chaine : Si je mets le code dans un champ libelle ca marche (en suivant l'exemple fourni en V9 ), mais si je construit la chaine dans une variable chaine (meme en doublant les "") j'ai des erreurs d'execution.
ex : Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne sResultatCompile est une chaîne Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
SELON sResultatCompile CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure) CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo() AUTRE CAS : sResultat = sResultatCompile FIN
pour i=1 à 10
Nomobjet+i est un objet maclasse
fin pour
Pour i=1 à 10
{"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse
Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des
structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour
construire la chaine :
Si je mets le code dans un champ libelle ca marche (en suivant l'exemple
fourni en V9 ), mais si je construit la chaine dans une variable
chaine (meme en doublant les "") j'ai des erreurs d'execution.
ex :
Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte
renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne
sResultatCompile est une chaîne
Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte
renvoyer i "
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
pour i=1 à 10 Nomobjet+i est un objet maclasse fin pour
Pour i=1 à 10 {"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour construire la chaine : Si je mets le code dans un champ libelle ca marche (en suivant l'exemple fourni en V9 ), mais si je construit la chaine dans une variable chaine (meme en doublant les "") j'ai des erreurs d'execution.
ex : Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne sResultatCompile est une chaîne Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
SELON sResultatCompile CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure) CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo() AUTRE CAS : sResultat = sResultatCompile FIN
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+"; i=i+"+""""+numducompte+""""+"; renvoyer i "
"Jean-Luc Baptiste" a écrit dans le message de news: 43b906fb$0$29200$
Gilles Guédikian a écrit :
Jean-Luc Baptiste a pensé très fort :
Jean Passe a écrit :
Salut,
pour i=1 à 10 Nomobjet+i est un objet maclasse fin pour
Pour i=1 à 10 {"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour construire la chaine : Si je mets le code dans un champ libelle ca marche (en suivant l'exemple fourni en V9 ), mais si je construit la chaine dans une variable chaine (meme en doublant les "") j'ai des erreurs d'execution.
ex : Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne sResultatCompile est une chaîne Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
SELON sResultatCompile CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure) CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo() AUTRE CAS : sResultat = sResultatCompile FIN
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+";
i=i+"+""""+numducompte+""""+"; renvoyer i "
"Jean-Luc Baptiste" <jeanluc.baptiste@free.fr> a écrit dans le message de
news: 43b906fb$0$29200$8fcfb975@news.wanadoo.fr...
Gilles Guédikian a écrit :
Jean-Luc Baptiste a pensé très fort :
Jean Passe a écrit :
Salut,
pour i=1 à 10
Nomobjet+i est un objet maclasse
fin pour
Pour i=1 à 10
{"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse
Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des
structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour
construire la chaine :
Si je mets le code dans un champ libelle ca marche (en suivant l'exemple
fourni en V9 ), mais si je construit la chaine dans une variable chaine
(meme en doublant les "") j'ai des erreurs d'execution.
ex :
Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte
renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne
sResultatCompile est une chaîne
Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte
renvoyer i "
SELON sResultatCompile
CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure)
CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo()
AUTRE CAS : sResultat = sResultatCompile
FIN
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+"; i=i+"+""""+numducompte+""""+"; renvoyer i "
"Jean-Luc Baptiste" a écrit dans le message de news: 43b906fb$0$29200$
Gilles Guédikian a écrit :
Jean-Luc Baptiste a pensé très fort :
Jean Passe a écrit :
Salut,
pour i=1 à 10 Nomobjet+i est un objet maclasse fin pour
Pour i=1 à 10 {"nomobjet"+NumeriqueVersChaine(i)}est un objet maclasse Fin
Ben non ;-))
De mémoire il me semble que ça ne marche pas avec des classes, ni des structures.
Il faut passer par la compilation dynamique mais j'ai des soucis pour construire la chaine : Si je mets le code dans un champ libelle ca marche (en suivant l'exemple fourni en V9 ), mais si je construit la chaine dans une variable chaine (meme en doublant les "") j'ai des erreurs d'execution.
ex : Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
numducompte est un champ de saisie avec ou sans " " ca coince
-----******** Tout le code du bouton *************-----------
sResultat est une chaîne sResultatCompile est une chaîne Lasource est une chaîne="i est une chaine=""Lecompte"" i=i+numducompte renvoyer i "
SELON sResultatCompile CAS "" : sResultat = ExécuteTraitement("Proc_dynamique", trtProcédure) CAS "ERR" : sResultat = "Compilation impossible. "+RC+ErreurInfo() AUTRE CAS : sResultat = sResultatCompile FIN
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+"; i=i+"+""""+numducompte+""""+"; renvoyer i "
Effectivement construite comme ça la chaine est interprétée merci !
Mon souci est toujours là, je n'arrive pas à instancier un objet dont le nom est connu a posteriori :
J'ai un nom dynamique mais : {monnom} est un objet compte c'est refusé !
Pierre BOUSQUET
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
"Jean-Luc Baptiste" a écrit dans le message de news: 43b936b1$0$29203$
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+"; i=i+"+""""+numducompte+""""+"; renvoyer i "
Effectivement construite comme ça la chaine est interprétée merci !
Mon souci est toujours là, je n'arrive pas à instancier un objet dont le nom est connu a posteriori :
J'ai un nom dynamique mais : {monnom} est un objet compte c'est refusé !
il faut que l'objet compte soit déclaré dans le même code que la procédure
dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est
dynamique, tu pourras seulement faire une RENVOYER dans ta procédure
dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
"Jean-Luc Baptiste" <jeanluc.baptiste@free.fr> a écrit dans le message de
news: 43b936b1$0$29203$8fcfb975@news.wanadoo.fr...
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+";
i=i+"+""""+numducompte+""""+"; renvoyer i "
Effectivement construite comme ça la chaine est interprétée merci !
Mon souci est toujours là, je n'arrive pas à instancier un objet dont le
nom est connu a posteriori :
J'ai un nom dynamique mais :
{monnom} est un objet compte
c'est refusé !
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
"Jean-Luc Baptiste" a écrit dans le message de news: 43b936b1$0$29203$
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
Lasource est une chaîne="i est une chaine="+""""+"Lecompte : "+""""+"; i=i+"+""""+numducompte+""""+"; renvoyer i "
Effectivement construite comme ça la chaine est interprétée merci !
Mon souci est toujours là, je n'arrive pas à instancier un objet dont le nom est connu a posteriori :
J'ai un nom dynamique mais : {monnom} est un objet compte c'est refusé !
Jean-Luc Baptiste
Pierre BOUSQUET a écrit :
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on peut le faire en java ou c# par exemple (illustration pédago et non un cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un tableau d'objet de la classe agence. Les objets comptes sont crées les un aprés les autres et leurs nom d'objet est le numéro de compte. De cette facon je peux faire une boucle quelconque qui tant que l'on entre des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte cpt2 est un objet compte cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai {cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..." fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur, l'exemple est a but didactique donc peut-être éloigné de la réalité mais j'illustre 2 concepts interressants en objet ( tableau d'objets et creation dynamique d'objets)
A bientôt
Pierre BOUSQUET a écrit :
il faut que l'objet compte soit déclaré dans le même code que la procédure
dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est
dynamique, tu pourras seulement faire une RENVOYER dans ta procédure
dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on
peut le faire en java ou c# par exemple (illustration pédago et non un
cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un
tableau d'objet de la classe agence. Les objets comptes sont crées les
un aprés les autres et leurs nom d'objet est le numéro de compte. De
cette facon je peux faire une boucle quelconque qui tant que l'on entre
des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte
cpt2 est un objet compte
cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai
{cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a
créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..."
fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur,
l'exemple est a but didactique donc peut-être éloigné de la réalité mais
j'illustre 2 concepts interressants en objet ( tableau d'objets et
creation dynamique d'objets)
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on peut le faire en java ou c# par exemple (illustration pédago et non un cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un tableau d'objet de la classe agence. Les objets comptes sont crées les un aprés les autres et leurs nom d'objet est le numéro de compte. De cette facon je peux faire une boucle quelconque qui tant que l'on entre des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte cpt2 est un objet compte cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai {cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..." fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur, l'exemple est a but didactique donc peut-être éloigné de la réalité mais j'illustre 2 concepts interressants en objet ( tableau d'objets et creation dynamique d'objets)
A bientôt
Pascal ROY
Bonjour,
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite Si tu connais le nb de compte tu peux directement allouer le bon nombre Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte Si t'as choisi la 1ere Solution tu ecrit directement gnNbObjets ++ gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( ) Sinon gnNbObjets ++ Si gnNbObjets = 1 alors gMesObjets = Allouer un Tableau de 1 ObjetCompte Sinon Dimension( gMesObjets, gnNbObjets) Fin gMesObjets[ gnNbObjets] = allouer un ObjetCompte( ) Fin fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors pour i = 1 à gnNbObjets liberer( gMesObjets[ i]) fin Liberer( gMesObjets) fin
Voila !
Personnellement, comme je suis un peu fainéant, je me suis créé une classe "Collection" qui contient un tableau d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle CollectionItem, et hop ! En route vers la gloire :-)
Pascal
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on peut le faire en java ou c# par exemple (illustration pédago et non un cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un tableau d'objet de la classe agence. Les objets comptes sont crées les un aprés les autres et leurs nom d'objet est le numéro de compte. De cette facon je peux faire une boucle quelconque qui tant que l'on entre des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte cpt2 est un objet compte cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai {cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..." fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur, l'exemple est a but didactique donc peut-être éloigné de la réalité mais j'illustre 2 concepts interressants en objet ( tableau d'objets et creation dynamique d'objets)
A bientôt
Bonjour,
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null
gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite
Si tu connais le nb de compte tu peux directement allouer le bon nombre
Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte
Si t'as choisi la 1ere Solution tu ecrit directement
gnNbObjets ++
gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( )
Sinon
gnNbObjets ++
Si gnNbObjets = 1 alors
gMesObjets = Allouer un Tableau de 1 ObjetCompte
Sinon
Dimension( gMesObjets, gnNbObjets)
Fin
gMesObjets[ gnNbObjets] = allouer un ObjetCompte( )
Fin
fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors
pour i = 1 à gnNbObjets
liberer( gMesObjets[ i])
fin
Liberer( gMesObjets)
fin
Voila !
Personnellement, comme je suis un peu fainéant, je me
suis créé une classe "Collection" qui contient un tableau
d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle
CollectionItem, et hop ! En route vers la gloire :-)
Pascal
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
il faut que l'objet compte soit déclaré dans le même code que la
procédure dynamique (ou alors moncompte est global au projet ou à la
fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il
est dynamique, tu pourras seulement faire une RENVOYER dans ta
procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on
peut le faire en java ou c# par exemple (illustration pédago et non un
cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un
tableau d'objet de la classe agence. Les objets comptes sont crées les
un aprés les autres et leurs nom d'objet est le numéro de compte. De
cette facon je peux faire une boucle quelconque qui tant que l'on entre
des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte
cpt2 est un objet compte
cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai
{cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a
créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..."
fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur,
l'exemple est a but didactique donc peut-être éloigné de la réalité mais
j'illustre 2 concepts interressants en objet ( tableau d'objets et
creation dynamique d'objets)
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite Si tu connais le nb de compte tu peux directement allouer le bon nombre Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte Si t'as choisi la 1ere Solution tu ecrit directement gnNbObjets ++ gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( ) Sinon gnNbObjets ++ Si gnNbObjets = 1 alors gMesObjets = Allouer un Tableau de 1 ObjetCompte Sinon Dimension( gMesObjets, gnNbObjets) Fin gMesObjets[ gnNbObjets] = allouer un ObjetCompte( ) Fin fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors pour i = 1 à gnNbObjets liberer( gMesObjets[ i]) fin Liberer( gMesObjets) fin
Voila !
Personnellement, comme je suis un peu fainéant, je me suis créé une classe "Collection" qui contient un tableau d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle CollectionItem, et hop ! En route vers la gloire :-)
Pascal
Jean-Luc Baptiste a écrit :
Pierre BOUSQUET a écrit :
il faut que l'objet compte soit déclaré dans le même code que la procédure dynamique (ou alors moncompte est global au projet ou à la fenêtre)
MaVariable est une chaîne = "test"
Trace(Compile("Proc", "MaStruct est une structure"+RC+...
" MonEntier est entier = 56"+RC+...
"FIN"+RC+...
MaVariable+" est une MaStruct"+RC+...
MaVariable+":MonEntierR"+RC+...
"trace("+MaVariable+":MonEntier)"))
ExécuteTraitement("Proc",trtProcédure)
tu ne pourras pas récupérer la valeur de l'objet dynamique puisqu'il est dynamique, tu pourras seulement faire une RENVOYER dans ta procédure dynamique pour récupérer sa valeur
Que veux-tu faire au juste, il y a peut-être un moyen plus simple
En fait je souhaite illustrer la creation dynamique d'objet comme on peut le faire en java ou c# par exemple (illustration pédago et non un cas réel )
une agence bancaire gère plusieurs comptes qui seront mis dans un tableau d'objet de la classe agence. Les objets comptes sont crées les un aprés les autres et leurs nom d'objet est le numéro de compte. De cette facon je peux faire une boucle quelconque qui tant que l'on entre des numéro de compte crée des objets. ça m'evite de faire
cpt1 est un objet compte cpt2 est un objet compte cptn ................
Là je pars du principe que je connais le nombre d'objet compte
Ceux que je désire serait :
tantque vrai {cpt+NumeroDeCompte} est un objet compte // le pb est que si j'arrive a créer le nom de la variable dynamiquement WinDev n'accepte plus le "est..." fin tq
Voilà ce que je désire faire si tu as une idée je suis preneur, l'exemple est a but didactique donc peut-être éloigné de la réalité mais j'illustre 2 concepts interressants en objet ( tableau d'objets et creation dynamique d'objets)
A bientôt
Jean-Luc Baptiste
Pascal ROY a écrit :
Bonjour,
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite Si tu connais le nb de compte tu peux directement allouer le bon nombre Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte Si t'as choisi la 1ere Solution tu ecrit directement gnNbObjets ++ gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( ) Sinon gnNbObjets ++ Si gnNbObjets = 1 alors gMesObjets = Allouer un Tableau de 1 ObjetCompte Sinon Dimension( gMesObjets, gnNbObjets) Fin gMesObjets[ gnNbObjets] = allouer un ObjetCompte( ) Fin fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors pour i = 1 à gnNbObjets liberer( gMesObjets[ i]) fin Liberer( gMesObjets) fin
Voila !
Personnellement, comme je suis un peu fainéant, je me suis créé une classe "Collection" qui contient un tableau d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle CollectionItem, et hop ! En route vers la gloire :-)
Pascal
C'est sympa comme solution ! Je teste au plus tot.
Peux-tu m'en dire plus au sujet de ta classe collection ? Les méthodes majeures ?
Merci
Pascal ROY a écrit :
Bonjour,
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null
gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite
Si tu connais le nb de compte tu peux directement allouer le bon nombre
Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte
Si t'as choisi la 1ere Solution tu ecrit directement
gnNbObjets ++
gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( )
Sinon
gnNbObjets ++
Si gnNbObjets = 1 alors
gMesObjets = Allouer un Tableau de 1 ObjetCompte
Sinon
Dimension( gMesObjets, gnNbObjets)
Fin
gMesObjets[ gnNbObjets] = allouer un ObjetCompte( )
Fin
fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors
pour i = 1 à gnNbObjets
liberer( gMesObjets[ i])
fin
Liberer( gMesObjets)
fin
Voila !
Personnellement, comme je suis un peu fainéant, je me
suis créé une classe "Collection" qui contient un tableau
d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle
CollectionItem, et hop ! En route vers la gloire :-)
Pascal
C'est sympa comme solution ! Je teste au plus tot.
Peux-tu m'en dire plus au sujet de ta classe collection ? Les méthodes
majeures ?
Perso, je déclarerais un tableau dynamique global à l'appli.
gMesObjets est un tableau dynamique = Null gnNbObjets est un entier = 0 //Ca sert a connaitre le nombre d'objets
Ensuite Si tu connais le nb de compte tu peux directement allouer le bon nombre Ex : gMesObjets = Allouer tableau de kNbCompte ObjetCompte
tantque gNbObjets < kNbCompte Si t'as choisi la 1ere Solution tu ecrit directement gnNbObjets ++ gMesObjets[ gnNbObjets] = Allouer un est un ObjetCompte( ) Sinon gnNbObjets ++ Si gnNbObjets = 1 alors gMesObjets = Allouer un Tableau de 1 ObjetCompte Sinon Dimension( gMesObjets, gnNbObjets) Fin gMesObjets[ gnNbObjets] = allouer un ObjetCompte( ) Fin fin tq
Dans ce cas, il faut faire, en fin de projet
Si gMesObjets <> NULL alors pour i = 1 à gnNbObjets liberer( gMesObjets[ i]) fin Liberer( gMesObjets) fin
Voila !
Personnellement, comme je suis un peu fainéant, je me suis créé une classe "Collection" qui contient un tableau d'objets d'un type CollectionItem.
Je dérive mes objets à mettre en liste d'une classe virtuelle CollectionItem, et hop ! En route vers la gloire :-)
Pascal
C'est sympa comme solution ! Je teste au plus tot.
Peux-tu m'en dire plus au sujet de ta classe collection ? Les méthodes majeures ?