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 :

Peux ton simplifier du code


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par d�faut Peux ton simplifier du code
    bonjour

    j'aimerais savoir si il est possible de modifier cette partie de code

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
            while(Connection_BD->TableSqlPal->Eof == false)
            {
                    EtatZone = Connection_BD->TableSqlPal->FieldByName("Etat")->Value;
                    // Champ a remplir
                    if(EtatZone == "Occupé")
                    {
                            NomZone = Connection_BD->TableSqlPal->FieldByName("Nom_ZoneP")->Value;
     
                            switch(NomZone)
                            {
                                    case 1:
                                    {
                                            BP1->Color = clRed;
                                            ShapeBP1->Brush->Color = clRed;
                                            break;
                                    }
     
                                    case 2:
                                    {
                                            BP2->Color = clRed;
                                            ShapeBP2->Brush->Color = clRed;
                                            break;
                                    }
                                    case 3:
                                    {
                                            BP3->Color = clRed;
                                            ShapeBP3->Brush->Color = clRed;
                                            break;
                                    }
                                    case 4:
                                    {
                                            BP4->Color = clRed;
                                            ShapeBP4->Brush->Color = clRed;
                                            break;
                                    }
                            }
     
                    }
                    Connection_BD->TableSqlPal->Next();
            }
    car de le switch je dois mettre 21 case logiquement.

    merci d'avance

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Tu peux faire des array de taille 21.
    Tu en fait une de BP, une de ShapeBP et une de (ou deux je sais pas trop) de Couleur. Ensuite ton code ressemble �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
        BP[NomZone]->Color = Couleur[NomZone];
        ShapeBP[NomZone]->Brush->Color = Couleur[NomZone];

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par d�faut
    ok merci

    mais je comprend pas trop comment je fais mon test pour verifier si il faut mettre la couleur ??

    le nombre de ligne de code reste identique non ??

    merci de votre aide

  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Dans le code que tu as mis plus haut tu ne fais pas de test, tu mets toujours de la couleur?

    Moi je te parle de faire une array comme celle-ci pour la couleur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    TColor Couleur[] = {clRed, clRed, clRed, clRed, clRed, clRed, clRed, clRed,
                        clRed, clRed, clRed, clRed, clRed, clRed, clRed, clRed,
                        clRed, clRed, clRed, clRed, clRed};
    Je ne sait pas si tes ShapeBPXX sont des TShape, si oui le code devrait �tre comme ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    TShape *ShapeBP[] = {ShapeBP1, ShapeBP2, ShapeBP3, ShapeBP4, ShapeBP5, ShapeBP6,
        ShapeBP7, ShapeBP8, ShapeBP9, ShapeBP10, ShapeBP11, ShapeBP12, ShapeBP13,
        ShapeBP14, ShapeBP15, ShapeBP16, ShapeBP17, ShapeBP18, ShapeBP19, ShapeBP20,
        ShapeBP21};
    Ensuite tu n'as pas besoin de faire de switch/case. Tu fais simplement:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            while(Connection_BD->TableSqlPal->Eof == false)
            {
                    EtatZone = Connection_BD->TableSqlPal->FieldByName("Etat")->Value;
                    // Champ a remplir
                    if(EtatZone == "Occupé")
                    {
                            NomZone = Connection_BD->TableSqlPal->FieldByName("Nom_ZoneP")->Value;
                            //BP[NomZone]->Color = Couleur[NomZone];
                            ShapeBP[NomZone]->Brush->Color = Couleur[NomZone];
     
                    }
                    Connection_BD->TableSqlPal->Next();
            }

  5. #5
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonjour les builderistes ...
    (ca fait bien longtemps que je n'�tais pas pass� par la)

    Est ce obligatoire de passer par des d�clarations de tableaux ?
    On ne pourrais pas jouer avec FindComponent, sachant que l'on a une partie fixe pour le nom de l'objet apparement ("ShapeBP") et une partie dynamique( NomZone ).


    Comme d�cris ici quoi:
    http://cpp.developpez.com/faq/bcb/?p...mposantsdivers

    @+

  6. #6
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Voici ma contribution :

    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
    16
    17
    18
     
     
    while(Connection_BD->TableSqlPal->Eof == false)
    {
       if( Connection_BD->TableSqlPal->FieldByName("Etat")->Value == "Occupé")
         {
            String cpIdx = Connection_BD -> TableSqlPal -> FieldByName("Nom_ZoneP") -> Value ;
     
            TPaintBrush *PBrushi = dynamic_cast <TPaintBrush*> (this -> FindComponent("BP" + cpIdx));
            TShape       *Shapei = dynamic_cast <TShape*>     (this -> FindComponent("ShapeBP" + cpIdx));
     
            if (Shapei != NULL && PBrushi !=NULL)
            {
                       PBrushi -> Color = clRed;
                       Shapei  -> Brush -> Color = clRed;
            }
          }
    }
    A noter

  7. #7
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Il ya aussi une fa�on d'optimiser plus ton programme :

    Si TableSqlPal est une requette, ajoute une condition � la requette de mani�re � s�lectionner les enregistrements dont :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Select .... Form ....
     
    Where .... AND (Connection_BD->TableSqlPal->FieldByName("Etat")->Value == "Occup�")
    Sinon, Si TableSqlPal est une table, tu peux faire un filtrage des enregistrements, �a aac�l�re l'execution.


  8. #8
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Salut, l'id�e du FindComponent est bonne si le code n'est pas appel� trop souvent. Faire 42 FindComponent prend beaucoup de temps comparativement � lire une array, mais si la t�che n'est ex�cuter que quelques fois et qu'il n'est pas dans une boucle, c'est bon

    En plus, il n'avait pas pr�ciser si les composants �tais tous sur la m�me Form. Donc � ce niveau aussi l'array est une meilleure solution. C'est tr�s facile de faire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    TShape *ShapeBP[] = {Form1->ShapeBP1, Form2->ShapeBP2, ...};

  9. #9
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    Il y'avait un bug sur le programme que j'ai post� plus haut

    A reprendre par :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    if (Shapei != NULL && PBrushi !=NULL)
    C bon j'ai corrig�

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par d�faut
    Merci de votre aide j'ai choisi la m�thode de Crayon rapide et efficace .

    Merci

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

Discussions similaires

  1. qui peux m'expliquer ce code ligne par ligne merci
    Par superuser dans le forum D�buter avec Java
    R�ponses: 3
    Dernier message: 08/04/2008, 11h25
  2. Simplifier mon code "Majuscule/Minuscule"
    Par Manou34 dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 24/01/2008, 17h05
  3. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    R�ponses: 19
    Dernier message: 24/01/2008, 16h15
  4. R�ponses: 3
    Dernier message: 20/11/2006, 09h45
  5. Peux-ton fixer une limite d'upload / sec
    Par programmerPhil dans le forum Apache
    R�ponses: 3
    Dernier message: 18/07/2006, 10h37

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