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 :

[D7]form MDI child , create, close


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Par défaut [D7]form MDI child , create, close
    Bonjour,

    le titre n'est pas très explicite désolé.

    Bon j'ai dans mon appli une form child Flisting que j'appele à partir d'une autre child. Jusque là c'est bon. Le problème que je rencontre c'est que je veux tester si FListing existe alors je la fermer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FListing <> nil then FListing.close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFListing.close(sender : TObject);
    begin
    action := caFree;
    end;
    quand je l'ouvre une première fois ca marche FListing = nil, par contre si je l'ouvre une deuxième fois, alors que j'ai fermer FLisiting :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Violation d'accès à l'adresse 000000 ....
    Du coup, j'ai essayer avec Free, FreeInstance ....

    en exécutant de pas à pas lors de la deuxième ouverture je mets le curseur sur FListing lors du if et il me marque toutes les options notament ActionList = nil mais pas simplement FListing = nil comme lors de la première ouverture. Donc je ne comprends pas, pour lui FListing existe sans exister ... Ca voudrais dire que ca mémoire est toujours allouée ???

    merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 80
    Par défaut
    Bonjour,

    Pour avoir rencontré le problème avec de nombreux objets autres que des forms, j'aurai tendance à conseiller la fonction "FreeAndNil(MonObjet)". Ca effectue un free, et à la fin, il fait un "MonObjet := nil" .

    Je n'ai jamais essayé avec les Forms, donc, à voir si ça fonctionne...

    Pergos.

  3. #3
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    @Pergos, si si ça marche ! C'est la méthode que j'emploie.

  4. #4
    Membre averti
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Par défaut
    merci de vos réponses.

    J'ai donc remplacé dans TFListing.FomClose
    par
    résultat quand je ferme FListing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Le projet a provoqué une classe d'exception EAccessViolation avec le message
    'Violation d'accès à l'adresse 40005989 dans le module rtl70.bpl.
    Lecture de l'adresse FFFFFFFF.

  5. #5
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut,

    Si je comprends bien, tu effectues le FreeAndNil(FListing) à l'intérieur même de la form.

    C'est de là que provient la violation. Le FreeAndNil de la form ne doit pas être exécuté depuis la form elle-même, mais depuis 'l'extérieur': la form appelante par exemple ou la MDIForm.

    @+ Claudius

  6. #6
    Membre averti
    Inscrit en
    Février 2006
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 37
    Par défaut
    ok c'était bien ça.

    Donc si je comprends bien le caFree attend la fin de l'unité pour désallouer alors que FreeAndNil le fait immédiatement ... gr#/mblpkh$$### de cerveau ramoli !

    merci.

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

Discussions similaires

  1. [C# / VS 2005] Form MDI Child hors de la fenetre Parent
    Par mr_keyser dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/05/2007, 11h24
  2. Réponses: 11
    Dernier message: 28/02/2007, 12h18
  3. Comment faire une Form MDI dynamiquement modale ?
    Par eponette dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/09/2005, 10h14
  4. comment faire communiquer deux form MDI?
    Par eponette dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2005, 12h20
  5. [MDI] Child maximize
    Par zorrax dans le forum Composants VCL
    Réponses: 4
    Dernier message: 26/04/2004, 17h33

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