Variable publique, creation dynamique ? - Delphi/Pascal - Programmation
Marsh Posté le 29-12-2004 à 11:50:24
Je ne dois qd meme pas faire un truc du style :
Code :
|
????
[edit] bah de toute facon c pas possible de coder ca
Marsh Posté le 29-12-2004 à 20:25:28
with TwSaisieCellule(TwBaseWindowClass(GetClass('TwSaisieCellule')).Create(WebApplication)) do |
Dans ton cas il prenait ModeSaisie de Self plutôt que du TwSaisieCellule créé, vu que dans le with tu avais un TwBaseWindowClass au lieu d'un TwSaisieCellule
Une variable intermédiaire serait peut-être plus simple qu'un "with" dans ce cas, non ?
Marsh Posté le 30-12-2004 à 10:31:52
antp a écrit :
|
Merci, mais j avais compris les symptomes, en fait je ne pige pas pk c si bloquant et comment contourner ce pb.
c quoi pour toi une variable intermediaire dans ce cas precis ou g une creation dynamique de chez dynamique et que je dois absolument y passer un param ?
Ce que je ne pige pas c que le show il me le fait bien, il m affiche bien la fenetre wSaisieCellule, donc pk on n arrive pas a y passer un param
Marsh Posté le 30-12-2004 à 14:05:07
Parce que Show existe dans TwBaseWindowClass alors que ModeSaisie n'existe pas je suppose.
La variable intermédiaire c'était pour éviter les erreurs du with : quand un truc n'existe pas dans l'objet passé à with il prend le truc de Self, sans qu'on ne s'en rende compte. Donc quand on teste il est parfois plus prudent de faire une variable intermédiaire et de ne pas utiliser le with ; quitte à mettre le with une fois que tout marche bien.
Marsh Posté le 30-12-2004 à 14:36:14
Je ne vois tjs pas comment tu veux faire pour cette variable intermediaire.
Juste pour rappel : toutes mes fenetres dont TwSaisieCellule derivent de TwBaseFenetre, et dans cette classe g ModeSaisie en variable publique.
Pour revenir sur les erreurs du with , si c etait reellement le cas, il ferait Self.ModeSaisie et Self.Show (etant donne que c deja le cas) et donc ne m afficherait pas ma nouvelle fenetre, non ?
Ma foi , ca me semble super obscure....
Merci pour ton aide, si tu pouvais me mettre un petit exemple de ta variable intermediaire histoire de voir si je peux vraiment appliquer ca, ca serait sympa
Merci
Marsh Posté le 30-12-2004 à 14:47:42
Je ne savais pas que ModeSaisie existait dans l'ancêtre
Alors je ne sais pas pourquoi ça foirait...
pour l'histoire de la variable, je parlais bêtement de faire :
NewWin := TwSaisieCellule(TwBaseWindowClass(GetClass('TwSaisieCellule')).Create(WebApplication));
NewWin.ModeSaisie:=AJOUT;
NewWin.Show;
Marsh Posté le 30-12-2004 à 14:49:24
ca fonctionne pas de faire ce petit bout de code.
La encore mystere, mais ca foire a la compil
Il n apprecie guere TwBaseWindowClass(GetClass('TwSaisieCellule')
Marsh Posté le 30-12-2004 à 15:10:08
"Il n apprecie guere"
il dit quoi ?
Citation : [Error] at line 541: je n'aprécie guère ce code |
?
Marsh Posté le 30-12-2004 à 15:21:56
g teste ce que j avais mis dans mon 2eme post, et je ne me rappelle plus l erreur.
Par contre, je ne peux pas appliquer ton bout de code tel quel car sinon je perd tout l interet de la construction dynamique par un string si je cast directement dans la fenetre que j obtiens
Marsh Posté le 30-12-2004 à 15:27:48
oui, je m'en doute, c'est pour ça que je parlais de faire ça pour tester et d'ensuite remplacer le "NewWin :=" par un "with" (parce que répéter le code du with pour chaque ligne comme tu voulais le faire, c'est totalement impossible vu que soit tu recrées l'objet à chaque ligne, soit tu appliques ton code à la classe au lieu de l'objet)
Marsh Posté le 03-01-2005 à 12:33:38
antp a écrit : Je ne savais pas que ModeSaisie existait dans l'ancêtre |
Bon g eu en fait des soucies avec delphi qui m a fait des trucs etranges O_o style en compilation il ne voyait plus mes points d arrets ou ce genre de connerie...
bon g reteste ton code, ca ne fct tjs pas, mon pb s etend un petit peu je pense :
'ModeSaisie' etait declaree en variable publique sur ma class TwBaseWindow, mais la g une variable publique 'N_Poste' definie dans TwSaisieCellule, qd je compile ton bout de code avec variable intermediaire g variable non declare pour N_Poste :s
Commence a me gaver ce pb, et plus j etudie la question moins je pense qu il existe une reelle solution au pb mais plus j en ai besoin de ce truc...Ouuinn
Merci a toute ame genereuse qui pourra m eclairer un peu
Marsh Posté le 03-01-2005 à 13:17:36
bah il doit y avoir un problème dans ta déclaration si il dit qu'elle n'est pas déclarée... faut voir le code
Marsh Posté le 03-01-2005 à 13:43:44
c simple , si je remplace :
test := TwSaisiePoste(TwBaseWindowClass(GetClass('TwSaisiePoste')).Create(WebApplication));
par :
test := TwSaisiePoste.Create(WebApplication);
ca fontionne....
Marsh Posté le 03-01-2005 à 14:37:51
Elles dérivent de TForm tes classes ? Si oui, pourquoi ne pas utiliser WebApplication.CreateForm plutôt ?
Marsh Posté le 03-01-2005 à 15:04:06
elles derivent de TIWAppForm (intraweb)
Marsh Posté le 03-01-2005 à 16:33:30
Je parlais pas au premier niveau, mais dans l'arbre des classes.
TIWAppForm a-t-il TForm dans ses parents ?
Sinon tu peux aussi tenter de faire
NewForm := GetClass('TwSaisieCellule').NewInstance;
où NewFom est de type TwBaseWindowClass
mais je ne suis pas sûr du résultat C'est ce que Delphi fait quand il créé des composants lus dans les .dfm lors de la création d'une Form, mais dans la doc ils disent de ne pas l'appeler directement.
Marsh Posté le 29-12-2004 à 11:10:47
Bonjour,
voila g un projet ou je cree differentes fenetres heritees d une fenetre de "base" dans laquelle je declare une variable publique ModeSaisie.
Dans ma fenetre de menu, je veux creer dynamiquement mes fenetres pour des raisons assez compliques (devellopement avec intraweb pour une appli intranet avec un systeme de retour au menu par un bouton "sommaire" mais egalement une naviguation en cascade par un bouton "precedent" bref...) et donc j applique ce code :
Et voila donc ou se pose mon pb, c que la valeur ModeSaisie que j initialise est en faite initialiser dans mon menu et non dans la fenetre creee.
Pourtant si on faisait :
ca fonctionnerait parfaitement....
Qqun a t il une idee sur ce qui cloche ? (en esperant que mon explication est suffisament claire )
Merci