Bonjour,
Bon le problème en lui-même est tout simple, mais à mon avis il est important de bien situer le contexte, c'est pourquoi les explications pourraient être longue.
Je travaille actuellement sur un projet comprenant (pour la partie qui nous intéresse) :
1) Unité contenant la classe d'un personnage : Unité Personnage. (pas de form associé, par abus pour parler de la classe CPersonnage, je dirais dans l'unité Personnage).
2) Une fiche relative à la gestion de son équipement : fiche Equipment
Cette fiche n'est pas créée automatiquement dès l'ouverture du programme. Se référer à la suite pour voir ce que je fais.
3) Une fiche de gestion d'achat d'équipement : fiche BuyEquipment
Dans l'unité Personnage en section Private j'ai la variable fGils de type integer. En public j'ai ajouté ce code là pour y avoir accès de l'extérieur :.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Property Gils : Integer Read fGils Write fGils;
Dans la partie Uses de l'interface je déclare la fiche Equipment.
Dans cette unité il y a le code suivant qui permet d'ouvrir la fenetre d'équipement :
En ce qui concerne Equipment et BuyEquipment il n'y a pas grand chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure CPersonnage.Equipment; var Form : TfEquipment; begin Form:=TfEquipment.Create(Nil); Form.LoadPlayerEquipment(fName,fGils,fListEquipment,fEquipment); Form.ShowModal; fEquipment:=Form.GetEquipment; Form.Free; end;
Dans Equipment, au Uses de l'implementation je déclare BuyEquipment.
Dans BuyEquipment, dans le Uses de l'interface je déclare Equipment.
Mon objectif est de pouvoir modifier la valeur de fGils à partir de BuyEquipment.
Donc moi je vois la chose comme ça mais cela ne fonctionne pas, voila pourquoi je viens vous voir. Voila comment moi je fais :
Dans Equipment, dans la classe de la form, en Private j'ajoute la variable fMoney de type integer. Dans la partie Public j'ajoute ceci
Dans BuyEquipment, dans la classe de la form, j'ajoute la variable fMoney de type integer. Dans l'évènement OnShow de la fenetre j'ajoute le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Property Money : Integer Read fMoney Write fMoney;
Et c'est là mon problème, à l'éxécution du programme, a l'ouverture de la fenetre j'ai un beau Acces Violation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part fMoney:=fEquipment.Money;
Je suis d'accord la chose est complexe, si les explications ne sont aps suffisante et que vous avez besoin de ficheir pour mieux saisir la chose, faites signe.
Quoi qu'il en soit merci déjà de m'avoir lu jusqu'ici, je reste en attente de vote réponse.
Par avance merci,
Bleys
[Edit] : Si nécessaire, la fonction LoadPlayerEquipment de Equipment appelé par Personnage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TfEquipment.LoadPlayerEquipment(Name : String;Money : Integer; List : TStringList;aEquipment: TEquipment); begin Caption:='Équipement en cours de '+Name; fListEquipment:=List; fPlayerEquipment:=aEquipment; fMoney:=Money; LoadWeapon(fPlayerEquipment.Weapon); LoadArmour(fPlayerEquipment.Armour); LoadAccessory1(fPlayerEquipment.Accessory[1]); LoadAccessory2(fPlayerEquipment.Accessory[2]); ChangeColor(gbEquipment); end;
Partager