Accéder à une variable d'une unité, dans une autre unité - Delphi/Pascal - Programmation
Marsh Posté le 25-04-2003 à 10:30:50
Bon alors, par ou commencer?
je crois que le prob c'est que tu a déclaré une classe dans unit2 et une variable ds unit1 . Pr acceder à ton tableau, tu dois passer par cette variable.
j'vais te donner un exemple, tu comprendra mieux
ds unit1 tu as qqch du style
Code :
|
ds unit2 tu dois avoir qqch du style
Code :
|
Si tu reviens ds unit1 qqpart il doit y avoir
Code :
|
du coup, pour acceder à ton tableau, tu dois taper
Code :
|
Alors, j'ai bon??
Marsh Posté le 25-04-2003 à 10:51:50
Ben en fait, je viens de tester comme ça :
Dans unit2 :
Code :
|
Dans unit1 :
Code :
|
Ca compile très bien, mais à l'exécution, ya
un problème de violation d'accès à une certaine adresse..
Marsh Posté le 25-04-2003 à 11:00:19
ça c'est parce que tu utilise un tableau dynamique.
tu dois utiliser setlength pr initialiser ton tableau
Marsh Posté le 25-04-2003 à 11:09:48
J'ai utilisé SetLength dans unit2 !!
Mais en fait, je viens de m'apercevoir que
ça merde juste avant que je fasse appelle
à ce tableau dans unit1.
Ca merde lorsque, dans unit1, je fais appel
à une procédure de unit2 en faisant :
Menu2.procedure
Pourtant, ça marche avec d'autres choses..
Je vais voir tout ça, je pense que je vais
trouver l'erreur..
Marsh Posté le 25-04-2003 à 11:15:55
doit y avoir un objet (menu2 par ex) qui est pas instancé ou un truc du genre
Marsh Posté le 25-04-2003 à 11:20:07
L'erreur se produit lorsque je fais
Code :
|
mais uniquement lorsque tab est déclaré
dans la partie public !!!
Je l'ai remis dans la partie var
et ça marche sans problème..........
... à part que je n'y ai plus accès dans unit1 !!!!
Marsh Posté le 25-04-2003 à 11:22:08
dans var au niveau de interface ou au niveau de implementation ? c'est dans la 1e partie
et y a pas de raison que tu n'y aies pas accès
Marsh Posté le 25-04-2003 à 11:34:22
c'est déclaré dans var de l'interface !!
et qd je le mets dans public dans interface ==> erreur..
Et dans var de interface, je n'y ai pas accès
dans l'unit1 en faisant Menu2.tab
Marsh Posté le 25-04-2003 à 11:35:15
heu si tu le mets hors de la classe tu dois pas mettre menu2. devant vu que c'est le nom de l'objet (instance de la classe)
Marsh Posté le 25-04-2003 à 11:38:26
HAAAAAAAAAA !!!!
OK, merci bcp, ça marche !!!!
Mais je pensais que c'était dans la classe..
Je croyais que ma classe représentait TOUTE l'unité !
On en apprend tous lesjours !!
Merci !!!!
Et Bounty aussi !!
Marsh Posté le 25-04-2003 à 11:42:50
Si jamais tu as des "tab" ailleurs et qu'il y a un risque de confusion, tu peux mettre unit2.tab pour préciser que c'est le tav de unit2 que tu veux utiliser
Marsh Posté le 25-04-2003 à 11:52:42
Ndmax a écrit : HAAAAAAAAAA !!!! |
De rien
pour etre complet j'ajouterai qu' une classe se definit comme suis:
ds la partie interface
Code :
|
et dans la partie implementation:
Code :
|
Marsh Posté le 25-04-2003 à 11:58:58
Ok, merci !!
Mais je n'utilise jamais de constructeurs
et destructeurs...
Il faut absolument s'en servir ??
En fait, je connais bien le Java,
mais je ne sais pas si c'est la même chose.
Déjà en Java, pas besoin de destructeur,
c'est automatique..
Ici, je ne me sers que des uses pour utiliser
d'autres "unités" ou "classes" mais jamais les
contructeurs qu'il faut créer soi-même..
Marsh Posté le 25-04-2003 à 12:00:14
Tiens tant qu'on y est, si tu commences en Delphi et qu'on ne t'impose pas de conventions d'écriture particulières, il vaut mieux suivre les recommendations de Borland au niveau de l'écriture du code :
http://community.borland.com/artic [...] 80,00.html
Si tout le monde utilise un même standard c'est plus agréable pour l'échange d'infos
Et le Pascal étant justement assez lisible, autant l'écrire de manière à ce qu'il le reste
Marsh Posté le 25-04-2003 à 12:02:24
Ndmax a écrit : Mais je n'utilise jamais de constructeurs |
Si ta classe a des autres classes qu'elle doit libérer (.Free), il faut mettre ça dans le destructeur. Idem s'il y a des opérations à faire lorsque tu détruis l'objet.
Pour le constructeur, c'est surtout pour l'initialisation de données que tu peux en avoir besoin. Sinon il y a un constructeur par défaut (.Create) qui vient du TObject (toutes les classes descendent obligatoirement de TObject même si on ne le spécifie pas)
Marsh Posté le 25-04-2003 à 12:23:52
OK, je savais que toutes les classes
descendaient de TObject, comme en Java d'ailleurs
Marsh Posté le 25-04-2003 à 10:15:57
Slt.
Nouveau petit problème, cette fois-ci,
j'ai déclaré et rempli un tableau dans une
unité2 et je désire l'utiliser dans une unité1.
Il est déclaré en tant que variable globale,
cad avant l'implémentation, et j'ai bien mis
l'unité2 dans le uses de l'unité1.
Je ne comprends pas pourquoi il ne peut pas
y accéder..
Faut-il obligatoirement créer un héritage ??
Merci.