IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Problème de violation d'accès : communication plusieurs Forms


Sujet :

Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut Problème de violation d'accès : communication plusieurs Forms
    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 :
    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;
    En ce qui concerne Equipment et BuyEquipment il n'y a pas grand chose :
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Property Money : Integer Read fMoney Write fMoney;
    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
    fMoney:=fEquipment.Money;
    Et c'est là mon problème, à l'éxécution du programme, a l'ouverture de la fenetre j'ai un beau Acces Violation.

    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;
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  2. #2
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    J'ai trouvé un moyen de outre passer le problème mais je ne l'approuve pas trop personnellement donc ... je reste ouvert à toute proposition
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Simplement en passant, une chose qui m'a sauté aux yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    fEquipment:=Form.GetEquipment;
     Form.Free;
    Une fiche ça se libère avec un release !

    Mais on passe tous par là

  4. #4
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par J-P
    Bonjour,

    Simplement en passant, une chose qui m'a sauté aux yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    fEquipment:=Form.GetEquipment;
     Form.Free;
    Une fiche ça se libère avec un release !

    Mais on passe tous par là
    Merci pour l'info


    Cela dit pour en revenir au soucis, j'ai modifié complètement la structure, donc pour le moment oublions la question si vraiment y'a soucis je reviendrais



    Merci
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par J-P
    Une fiche ça se libère avec un release !
    encore en va reparler de ce sujet
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Membre actif
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Points : 259
    Points
    259
    Par défaut
    Apparemment ça aussi ça fait débat


    Bon j'ai effectivement modifié complètement la structure parce que c'était un peu bordélique quand même et du coup j'ai plus de problème ...

    Donc je met le sujet en Résolu


    Merci quand même pour tout

    Bonne soirée
    "La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de violation d'acces
    Par bouzaidi dans le forum Delphi
    Réponses: 20
    Dernier message: 22/04/2007, 19h35
  2. [VB.Net] Menu commun à plusieurs Forms
    Par l1on3l dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/10/2006, 08h27
  3. [vb 2005]Problème de violation d'accès concurentiel
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 17h14
  4. Réponses: 8
    Dernier message: 08/03/2006, 16h12
  5. Problème de violation d'accès
    Par Oluha dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo