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] erreur sur Form.Free


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut [D7] erreur sur Form.Free
    bonjour

    j'ai une Form que je crée dynamiquement dans une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function Ouvre : boolean;
    var MaForm : TMaform;
    begin
     MaForm := TMaForm.Create(nil);
     Result := MaForm.ShowModal = mrOK;
     MaForm.Free;
    end;
    le free provoque un plantage à l'exécution que je ne parviens pas à cerner
    le plus bizarre est que si dans le OnDestroy de la form je mets un truc du genre :

    procedure TMaForm.FormDestroy(Sender: TObject);
    begin
    VariableGlobale := 1;
    end;

    et que je mets un point d'arrêt du debogueur dessus, le free ne plante plus à condition que je fasse un "pas à pas" (F8 dans l'EDI) dessus
    si je fais F9 directement ça plante

    je comprends vraiment pas, qu'est que ça peut être ?!

  2. #2
    Membre confirmé Avatar de souch
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2003
    Messages : 145
    Par défaut
    Salut,
    Ta rien dans le onclose ou le ondestroy qui pourrait liberer quelqu chose dans le mauvais ordre ?
    Le TCloseAction de ton onclose est peut etre a caFree ?
    @+

  3. #3
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    Citation Envoyé par souch
    Salut,
    Ta rien dans le onclose ou le ondestroy qui pourrait liberer quelqu chose dans le mauvais ordre ?
    Le TCloseAction de ton onclose est peut etre a caFree ?
    @+
    dans le OncloseQuery j'ai un truc conditionnel :
    if IBQuery1.UpdatePending then ...

    dans le OnClose je ferme simplement mes tables :
    IBQueryX.Close ...

    dans le OnDestroy j'ai rien

    je viens d'assigner explicitement le TCloseAction à caHide dans le OnClose, ça change rien
    je comprends vraiment rien

  4. #4
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    je viens de trouver le truc qui devait clocher

    sur ma fiche j'ai pas mal de compos IBQuery associés à des TIBUpdateSql

    j'ai essayé au hasard de supprimer des compos (pénible car il faut chaque fois raser le code associé) et au bout de quleques suppressions, miracle, le free a cessé de planter

    le dernier supprimé était un TIBUpdateSQL

    je l'ai rétablit sur la fiche exactement à l'identique (couper/colle), puis réassocié à son IBSQL d'origine, maintenant ça à l'air de marcher
    pourtant ça plantait même si le UPD n'était pas sollicité dans le OnCloseQuery

    quelqu'un aurait une idée d'explication ?

  5. #5
    Dry
    Dry est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Par défaut
    Il ne faut pas utiliser MyForm.free, qui ne se préoccupe pas de sovoir s'il reste des messages à destination de cette form, qui détruit donc cette form et ses composants un peu trop "violemment".

    Pour les form il faut ulitiser MyForm.Release.

    Citation issue de [F1] sur free :
    Pour libérer une fiche, appelez sa méthode Release, qui détruit la fiche et libère la mémoire allouée pour celle-ci après que tous ses gestionnaires d'événements et les composants qu'elle contient ont fini de s'exécuter.
    Citation issue de [F1] sur Release :
    Release ne détruit pas la fiche avant que tous les gestionnaires d'événements de la fiche et des composants de la fiche n'aient eu le temps de terminer leur exécution. Cette procédure garantit aussi que tous les messages de la file d'attente des événements de la fiche sont traités avant la libération de la fiche. Tous les gestionnaires d'événements de la fiche ou ses enfants doivent utiliser Release à la place de Free (Delphi) ou delete (C++). Sinon, des erreurs d'accès à la mémoire se produiront.
    Bon Dev

  6. #6
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    j'avais aussi essayé avec Release, mais ça n'avait pas levé les plantages
    c'était vraiment mon IBUpdate qui avait un pbm, pbm qui restera je le crains non identifié

    cela dit tu as raison, release semble plus prudent avec les forms et cette histoire m'a traumatisé, je vais remplacer mes Free

    bien amicalement

Discussions similaires

  1. Erreur sur un form
    Par redabadache3 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/12/2007, 15h12
  2. Message d'erreur sur site free
    Par aragorn23 dans le forum Langage
    Réponses: 2
    Dernier message: 03/12/2007, 22h52
  3. erreur installation forms 4.5 sur windows xp pro
    Par esthr dans le forum Forms
    Réponses: 1
    Dernier message: 12/09/2007, 03h07
  4. [Forms 6i] Capter l'erreur sur Next_Record
    Par Veve44 dans le forum Forms
    Réponses: 7
    Dernier message: 25/04/2006, 12h08
  5. Une erreur sur le free.. Oui mais pourquoi ?
    Par MonsieurAk dans le forum C
    Réponses: 7
    Dernier message: 22/12/2005, 20h51

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