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

Langage Delphi Discussion :

Liberer une MdiChild


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 106
    Points : 59
    Points
    59
    Par défaut Liberer une MdiChild
    Bonjour,

    Toutes mes MdiChild (plus d'une centaine) dérive d'un TmaForm, dérivant lui même du TForm de base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    unit Reserv_Frm;
     
    interface
     
    uses  Windows .....
    type
      TFrmReserv = class(TmaForm)
    ....
    end;
     
    var
      FrmReserv: TFrmReser;
     
     
    .....

    Pour fermer mes MdiChild, j'utilise un action:=cafree dans ma form mère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TmaForm.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      .......
      action := caFree;
     
    end;
    et dans le destroy, je met self a nil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TmaForm.FormDestroy(Sender: TObject);
    begin
      ...
      self:=nil;
    end;

    malheureusement, la variable de mon MdiChild ( FrmReserv ) ne passe pas a nil, je ne comprend pas pourquoi, alors que le self dans la class mère est bien a nil lui.

    j'ai essayé par une procédure de notification dans la Main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TMain.Notification(AComponent: TComponent; Operation: TOperation);
    begin
      inherited;
    If (Operation = opRemove) and
         (AComponent is TForm) then
         begin
        AComponent := Nil;
        if AComponent<>nil then
           AComponent := Nil;
         end;
     
    end;

    sans plus de succès.
    Dois_je repasser sur ma centaine de fiche pour mettre a nil manuellement mes mdichild ?

    j'ai remarqué tout de même que dans ces dernières, les attributs fname, owner sont tout de même vide, mais ce n'est pas suffisant pour moi

    cordialement
    Delphi 6 entreprise & interbase 6

    Bonne journée 8)

    Tout programme non trivial contient au moins un bug.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 740
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 740
    Points : 13 285
    Points
    13 285
    Par défaut
    Tu n'as pas besoin de définir Self à nil. C'est implicite à la destruction de la classe.

    Par contre FrmReserv est une variable indépendante de l'objet. Elle pointe simplement sur une zone mémoire "sensée" contenir une instance du type défini. L'objet n'a aucune connaissance des variables lui pointant dessus et ne peux donc pas les reseter à sa destruction.

    La seule façon est d'ajouter FrmReserv := nil dans OnClose.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    c'est bien ce qu'il me semblait, j'ai déjà commencer a parcourir toutes mes fiches, merci bien .

    Je laisse ouvert le post une petite journée au cas ou !
    Delphi 6 entreprise & interbase 6

    Bonne journée 8)

    Tout programme non trivial contient au moins un bug.

Discussions similaires

  1. Liberer une Adresse
    Par Gugli dans le forum Web & réseau
    Réponses: 3
    Dernier message: 12/02/2009, 09h38
  2. Réponses: 2
    Dernier message: 21/04/2007, 15h33
  3. Transparence d'une forme dans une MDIChild
    Par Sub13 dans le forum Delphi
    Réponses: 2
    Dernier message: 14/12/2006, 09h50
  4. [VB.NET] Recuperer un Event d'une MDIChild Vers MDIParent
    Par XnoTonio dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/05/2006, 15h49
  5. [VB6] Position d'une MDIchild dans un MDI
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/01/2003, 14h02

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