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 habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    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
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    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.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Membre habitué

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

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 168
    Points
    168
    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?

    Du bon sens tu auras
    Du bon sens tu auras encore
    Du bon sens tu auras toujours
    http://emilien.bresson.free.fr

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    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 expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    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 ...
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    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 expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    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

    @+
    @ bientôt...

    Salut & @+ sur 3W!

+ 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