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

C++Builder Discussion :

Utilisation d'une variable statique


Sujet :

C++Builder

  1. #1
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Utilisation d'une variable statique
    Bonjour,

    Pour conna�tre quelle est ma fiche ouverte j'utilise une variable statique d�fini dans un fichier .h : .
    Pourtant cette variable n'est jamais initialis� et j'ai beau l'affect� une valeur dans ma fiche g�rant les menus, mais pour les autres fiches, elle �gale toujours 0 (alors que je ne l'initialise jamais � 0, je change sa valeur que dans un seul fichier).

    Y'a t'il une mauvaise utilisation du STATIC ?

  2. #2
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Il me semble que le static se fait dans la classe mais pas entre les differentes classes.
    Pour une variable comme celle-ci, tu peut cr�er des fonction qui te permettrons de changer la valeur et de lire la valeur dans la m�me Form ou est d�clar� cette variable, ces fonctions �tant acc�ssible depuis les autre Form. Autre solution, tu utilise la propri�t� Tag de ta fenetre principal, qui est un int est qui ne sert qu'a stocker des information de ce genre, et qui est elle aussi accessible par les autres Form.

  3. #3
    Membre �prouv�

    Profil pro
    Cadre
    Inscrit en
    Mars 2006
    Messages
    132
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Par d�faut
    Je ne vois pas trop l'utilit� d'un static dans le cas pr�sent...
    A part des contraintes suppl�mentaires, un simple int aurait �t� suffisant, non?


  4. #4
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Pourquoi un static
    En fait j'ai une fiche Menu, qui g�re des MDI, donc les menus pour acc�der au autre fiche. Mais dans les autres fiches j'ai besoin de savoir dans quel menu je me trouve (en particulier une fiche g�rant que des composants de base de donn�es, cf un des pr�c�dents post laiss� au sujet de pb de lenteur du aux composants TADOQuery). Du coup le seul moyen est d'utiliser une variable statique, mais bon, je voulais �viter de mettre cette variable dans la fonction Menu, pour �viter des inclusions... Mais bon, c'est ce que je vais faire. Par contre, je ne vois pas trop l'inter�t d'un static maintenant vu que leur valeur ne sont pas conserv� de fiche en fiche....

    Voil�, si tu as des infos � ce sujet je suis preneur.

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par d�faut
    Bonjour,

    je d�veloppe actuellement une application sur le m�me principe:
    - une fiche principale,
    - des fiches MDI.

    Pour ma part j'ai cr�� une classe contenant les donn�es et structures communes � toutes les fiches.
    Cette classe est d�finie et impl�ment�e dans Data.h et Data.cpp.
    Le fichier d'en-t�te Data.h est inclus syst�matiquement dans tous les fichiers .cpp du projet. Ainsi toutes les Form ont acc�s � ces donn�es communes et aux m�thodes de gestion de ces donn�es.
    Enfin, cette classe poss�de une variable int public qui s'appelle nmr_page, pour 'num�ro page'. Cette variable contient le num�ro de la fiche MDI visible. Et toutes les Form peuvent le savoir.

    Si �a r�pond � ton probl�me ...

  6. #6
    Membre �clair�
    Inscrit en
    Octobre 2002
    Messages
    343
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Par d�faut Quel est le but d'un int public ?
    Oui, ton exemple est interessant, mais je ne comprends pas trop "int public" car dans chaque fiche enfant, je vais devoir cr�er une nouvelle instance Data, donc une valeur de data pour l'instance en cours. Donc, tu passes, l'instance de ta classe en param�tre � toutes tes formes ou tu as un autre moyen pour ne cr�er q'une instance de classe DATA commune � tout le programme, dans laquelle effectivement sera partag� ta variable nmr_page.

    J'ai du rat� qq'chose,

  7. #7
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par d�faut
    Tu n'as rien rat�, je n'ai simplement pas �t� assez explicite.

    La classe CData est d�finie dans un fichier d'en-t�te Data.h.
    La fen�tre principale, ou la TForm principale cr�e l'instance de la classe CData en dynamique; cela se passe dans le constructeur de la fen�tre principale:
    pData = new CData.

    Chaque TForm MDI poss�de un pointeur personnel appel� pData ( Par exemple CData *pData ).
    Lorsque toutes les TForm ont �t� cr��es, la fen�tre principale initialise chaque pointeur des Form MDI, sur l'instance de la classe CData.

    Exemple:
    FListeAdherents->pData = pData;
    FCompta->pData = pData;
    FVentilations->pData = pData;
    FPointage->pData = pData;
    FPlanning->pData = pData;
    FFacture->pData = pData;
    FCAF->pData = pData;
    etc...


    pData �tant le pointeur sur l'instance de CData, et appartenant � la fen�tre principale.

    Petit probl�me, la fen�tre principale est cr��e en premier et peut commencer � travailler alors que les fen�tres MDI n'existent pas encore.
    J'utilise OnIdle pour savoir lorsque l'application a fini son initialisation. A ce moment seulement tous les pointeurs peuvent �tre initialis�s.

    C'est peut �tre un peu compliqu� mais je n'ai pas trouv� d'autre solution

    Ensuite, dans la partie public de la classe CData, il existe une variable int nmr_page.

    Cette variable est accessible par n'importe quelle fiche MDI avec le code:
    pData->nmr_page

    Et bien entendu, la classe CData poss�de aussi des m�thodes pour g�rer les donn�es de l'application, m�thodes qui sont accessible par toutes les fiches MDI

    @+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Utilisation d'une Variable(Vb) dans d'autre language
    Par cach dans le forum VB 6 et ant�rieur
    R�ponses: 5
    Dernier message: 22/02/2005, 12h00
  2. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    R�ponses: 17
    Dernier message: 30/11/2004, 17h08
  3. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    R�ponses: 3
    Dernier message: 03/12/2003, 19h11
  4. Utilisation d'une variable sur plusieurs unit�s
    Par Yamaneko dans le forum Langage
    R�ponses: 2
    Dernier message: 05/06/2003, 11h23
  5. R�ponses: 4
    Dernier message: 05/06/2002, 14h35

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