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 :

form.show & form.hide / variable globale


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut form.show & form.hide / variable globale
    Bonjour

    Je m initie entre autre en lisant les differents post du forum.
    j ai lu qu une variable cree dans une fonction etait 'locale' et que la memoire qui lui etait allouée se liberait à la 'sortie' de la fonction.

    est-ce que lorsque l on fait un form.hide, que se form crée par exemple une tlist, des tabelaux etc... toute la memoire allouée est liberree ?

    et enfin, comment faire qu une variable soit 'uilisable' dans une autre form que celle ou elle a ete cree ???

    merci ?

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    non pas du tout
    C'ets plus compleque que ca.

    Quand on fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Procedure MaProc;
    Var uneVar : Integer;
    Begin
    [...]
    End;
    La variable uneVar est detruite en dehors de cette procedure (ou fonction).
    Elle est locale a la procedure, et ne peut etre utilisé en dehors du begin/end de cette procedure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type
      MaClasse = class(...)
      private
        uneVar : Integer;
        procedure MaProc;
      End;
     
    procedure TMaClasse.MaProc;
    Begin
    [...]
    end;
    ici la variable uneVar est globale a la classe, c'est a dire qu'elle ne peut etre utilise que dans la classe mais elle petu etre utilise partout et tout le temps que l'instance de la classe qui la manipule existe. Donc en dehors du begin/end de la parocedure on peur encore s'en servir.

    enfin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Var uneVar : Integer;
     
    procedure MaProc;
    Begin
    [...]
    End;
    ici encore la variabel est globale a l'unitee donc accessible tout le long du programme et accessible partout dans toute l'unitee.

    Apres il y a pleins de nuances et de subtilitées

    Sinon pour le hide tu te melange un peu les choses
    Hide ne detruit pas une form, mais la masque. c'ets equivalent a :
    Seul Destroy, Free (qui appelle destroy) voir meme release (qui appelle aussi destroy) detruisent la form.
    Un close ne la detruit pas non plus .... mais c'est aussi un hide plus evolué.

    Donc toute variable definie dans ta classe TForm est globale a la classe et existe tant qu'existe ta form (a priori tout au long du programme ).
    Elle peut etre accessible depuis l'exterieur si tu la definie dans la section public de ta classe.


    Bon courrage pour ton aprentissage !
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    merci pour ces precisions.

    une derniere chose alors

    si je veux detruire toutes les variables à l issue d'un traitement dans un form que j aurais appelé par un bouton, je dois bien, en lieu et place de ce que je faisais, à savoir un form.hide faire un form.destroy. ça j ai bien compris.

    Par contre, lors du lancement de l appli, est-ce que tous les forms sont 'crées en tacche de fond' et la mémoire allouée automatiquement à chaque variable ou la memoire est elle allouee lors de l'affichage de la fiche ???

    merci de cette precision car si la memoire est allouee pour toutes les variables de toutes les form automatiquement au lancement de l aplication et du form principal comment y remedier ?

    merci

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    jette un coup d'oeil dans le fichier dpr de ton application (ctrl+F12/nom de l'application)

    Tu as un (ou plusieurs) ligne du type Applciation.CreateForm(TForm1, form1);
    Ce sont ces lignes qui lancent la creation de tes forms.

    Lors de leurs creations, le constructeur Create est appelé.
    Donc en theorie, l'initialisation se passe dans cette fonction que l'on peut completer avec le systeme de "surcharge" de methode. C'ets encore un peu complexe pour ton niveau visiblement mais je t'encourrage a voir de quoi il en retourne

    Pour le cas des forms, une methode speciale est appelé dite "evenement".
    C'ets donc cet evenement "OnCreate" qui est appelé dans le constructeur create. Tu peux donc y placer ton code, sans avoir a surcharger le constructeur.

    Pour la liberation c'est exactement pareil.
    Lorsque l'applciation se termine via Applciation.terminate la variable application parcours le tableaux des forms remplie lors des divers Application.CreateForm et fait un release sur ces forms (methode qui appele destroy mais de maniere plus propre en ce qui concerne les objets derivant de tforms).

    Donc on va dire que tes foms sont libérés automatiquement par le systeme lorsque tu ferme l'applciation.
    De meme que poru le constructeur, on n'est pas obligé d'utiliser la surcharge de la methode destroy, mais on peut utiliser l'evenement OnClose, pour placer le code de liberation des objets.

    A noter : la premiere form cree est dite principale. C'ets a dire que la fermeture de cette fenetre (close) entraire la fermeture de l'applciation (ie application.terminate). Une des specialité du close par rapport au hide, qui s'occupe juste de mettre la property visible a false ... et d'en avertir le developpeur via l'evenement onHide.

    Voila en vrac des tas d'infos
    Fait le tris, prends quelques cahcets d'aspirine ... et tu peux revenir en redemander
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    meri c est parfait et ce 'vrac' repond parfaitement a mes questions.

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

Discussions similaires

  1. variable global dans Forms.
    Par rommel83 dans le forum Forms
    Réponses: 2
    Dernier message: 28/11/2007, 11h16
  2. [Débutant C#]Variable Globale pour deux forms
    Par progfou dans le forum C#
    Réponses: 7
    Dernier message: 20/02/2007, 09h08
  3. [Forms]Variable global en oracle form
    Par Sabact dans le forum Forms
    Réponses: 6
    Dernier message: 03/11/2006, 14h31
  4. [PHP-JS] Variable globale form
    Par guitz dans le forum Langage
    Réponses: 7
    Dernier message: 19/07/2006, 18h44
  5. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50

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