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 :

Application MDI et Ses Forms MDICHILD


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 32
    Points
    32
    Par défaut Application MDI et Ses Forms MDICHILD
    Bonjour mes amis,
    J'ai une application MDI, et un certain nombre de fiche MDIChild, J'appelle une fiche MDICHILD ex Mafiche comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaFiche:=TMaFiche.Create(Application);
    Mafiche.show;
    sur ma fiche je gère des tables de base de donnée donc des TTable, TClientDataset ...
    Le problème c'est que lorsque j'instancie deux Fiche de MaFiche et que je modifie les données sur l'une d'elle, qd je ferme la première ca passe, mais si j'essaie de fermer la deuxième un message d'erreur du genre : Violation d'accés .... merci de m'éclairer mes amis sur la manière de gérer les Forms MdiChild !!...

  2. #2
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    Salut,

    Pourrais tu détailler le message d'erreur?
    Sinon as tu vérifier comment étaient aloués et libérés tes objets de base de donnée?
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Probablement du au fait que tu utilises deux fois la même instance d'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      MaFiche:=TMaFiche.Create(Application);
      Mafiche.show;
    Recherche l'utilisation dans ton code de l'instance MaFiche en particulier dans
    le formclose ou le formdestroy
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Oui je veux instancier deux objets, et dans la procedure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TMafiche.FormClose(Sender: TObject;var Action: TCloseAction);
    begin
     IF IS_MODIFIED(cds) THEN // CDS un tableau contenant les noms des TCLIENTDATASET
    begin
       SHOWMESSAGE (' Veuillez Enregistrer ou Annuler les modifications !! ');
       else
    begin  
      CLOSE_DATA(CDS);
       Table1.Close;
       table2.Close; //Table1, Table2 des TTable 
     
    Action := caFree;
    end;
    end;
    voila les deux instances donc execute ce morceau de code, mais à la fermeture de la deuxième fiche un message d'erreur : Le projet MDTEST.exe à provoqué une classe d'exception EAccessVioolation à l'adresse 00000000 ...

  5. #5
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Je ne vois pas d'erreur dans ta procédure Formclose.

    Pourtant compte tenu de l'erreur énoncée il semble que tu libère un objet qui est partagé par les deux fiches.

    Alors où est déclaré la variable "CDS".

    Ton débogueur ne te permet-il pas de localiser l'erreur ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Bonjour;
    Voila j'ai réduit le code de manière à ne laisser qque ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // La procedure relative au bouton de fermeture de la fiche :
     
      procedure TMaFiche.BitBtn3Click(Sender: TObject);
    begin
     Mafiche.Close;
    end;
     
    et 
    procedure TMafiche.FormClose(Sender: TObject;var Action: TCloseAction);
     begin
      Action := caFree;
      end;
    end;
    mais toujours le même problème le comble c'est que si j'utilise le bouton de fermeture systeme de la faiche c'est reussi mais si jutilise le bouton fermer ça plante !!

  7. #7
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par soft_balade Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // La procedure relative au bouton de fermeture de la fiche :
     
      procedure TMaFiche.BitBtn3Click(Sender: TObject);
    begin
     Mafiche.Close;
    end;
    Ah là on le voit bien le bogue.

    "Mafiche" est une instance de ta seconde fiche.

    tu devrais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // La procedure relative au bouton de fermeture de la fiche :
     
    procedure TMaFiche.BitBtn3Click(Sender: TObject);
    begin
      {Mafiche.}Close;
      // ce qui revient à faire
      // Self.Close;
    end;
    Apprend à utiliser le débogueur c'est essentiel tu aurais sans doute trouver seul (avec l'aide du dégogueur) ou tu nous aurais donner la ligne en erreur plus tôt.

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup YURCK ta proposition de ne mettre que CLOSE à la place de MaFiche.CLOSE, règle le problème de Violation d'accés.
    Encore une fois thank's !!

  9. #9
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Salut.

    si vous voulez que vous données soit synchronisé en temps réelle aide toi d'un data module, ton souci disparaitra avec.

Discussions similaires

  1. Form MDI et Form MDIChild
    Par bargougui86 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 27/05/2010, 14h13
  2. Application MDI et positionnement fiche MDIChild
    Par Andry dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/10/2008, 12h57
  3. Windows Forms application mdi
    Par kekesilo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/05/2007, 16h29
  4. Changer l'arrière plan des forms dans une application MDI
    Par zentaf dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 06/04/2007, 12h39
  5. [C#] Application MDI (instancier les form enfants)
    Par EFCAugure dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/10/2005, 11h30

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