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 :

Petit conseil technique


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut Petit conseil technique
    Voila je souhaites faire une methode "universelle" plusieurs types dobjets
    genre les labels et des boutons par exemple

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void transformer(Tobject *sender)
    {
          si lobjet envoyé est un label faire .....
     
          si edit faire .......
     
     
     
    }
    Jai trouvé un truc avec classid mais jai rien compris , quelqun aurait un bout de code pour mexpliquer vite fait

    merci par avance

  2. #2
    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
    Bonsoir,

    Perso, je chercherais autour de la propriété 'ClassNameIs()' du Sender
    , + dans les truc et astuces et/ou la FAQ, tu trouveras comment faire un switch sur un AnsiString
    , donc tu dois pouvoir faire un 'switch' sur la valeur du 'ClassNameIs' du Sender et en fonction de chaque cas, travailler avec 'dynamic_cast' sur le bon type d'objet afin de faire les traitements propres a chaque objets.

    Désolé de ne pouvoir poster éventuellement de code pour le moment.

    En espérant t'aider, bon courage
    @+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall ActiverLien(TForm *MaFeuille,TObject *MonObjet)
    {
            MaFeuille->MonObjet->Cursor=crHandPoint;
            MaFeuille->MonObjet->Font->Color=clRed;
            MaFeuille->MonObjet->Font->Style = TFontStyles()<< fsBold << fsUnderline;
    }
    J'ai essayé un truc comme ca mais appremment ca marche pas du tout
    Jaimerais y faire pour les Label , les static text , les edits , et bitbutn ... ( genre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(classnameis("......" )
    mais je sais pas faire meme avec laide en ligne etc .... ) cest pour cela que jenvois ladresse de la Tforme et ladresse de lobjet contenu dans cette feuille quon veut modifié certaines de ces propriétés ... ?
    Vous me suivez ?

    Help me please

  4. #4
    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
    Bonsoir,

    J'avoue m'être un peu trompé, c'est ClassName() et non pas 'ClassNameIs' qu'il fallait chercher.
    Bon, normalement le mercredi soir est réservé (dans mon cas) au visionnage des aventures de mon "maitre sipirituel": docteur House.
    Ce que je vais préconiser donc n'est pas un remède universel, et des thérapies différentes pourraient surement venir a bout du mal qui bloque ton developpement ...
    J'ai donc utilisé pour le test un TEdit et un TLabel, et dans l'évènement OnClick() de chacun de ses objets, j'appelle une fonction:

    .H
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void __fastcall fonctionTest(TObject *Sender);
    .CPP
    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
     
    //---------------------------------------------------------------------------
    void __fastcall TForm6::fonctionTest(TObject *Sender)
    {
    AnsiString Values[] = {"TEdit", "TLabel"};
    int tabSize = sizeof(Values) / sizeof(AnsiString);
    TEdit *ed;
    TLabel *lab;
     
    String class_sender = Sender->ClassName();
     
    	switch(AnsiIndexStr(class_sender, &Values[0], tabSize))
    	{
    		case 0:
    			ed = dynamic_cast < TEdit* >(Sender);
    				ed->Text = "coucou, je suis dans l'edit";
    		break;
    		case 1:
    			lab = dynamic_cast < TLabel* >(Sender);
    				lab->Caption = "coucou, je suis dans le label";
    		break;
        }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm6::Label1Click(TObject *Sender)
    {
    	fonctionTest(Sender);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm6::Edit3Click(TObject *Sender)
    {
    	fonctionTest(Sender);	
    }
    //---------------------------------------------------------------------------
    Cela devrait t'aider, a condition que j'ai bien compris ton problème.
    Remarque: sinon, en partant du même principe, on devrais pouvoir utiliser 'SetPropValue();'
    Méthode très intéressante, dont tu devrais pouvoir retrouver trace dans ce forum, en faisant une petite recherche.

    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall ActiverLien(TForm *MaFeuille,TObject *MonObjet)
    {
            if(MaFeuille->MonObjet->ClassName()=="TLabel")
            {
                    MonObjet->Cursor=crHandPoint;
                    MaFeuille->MonObjet->Font->Color=clRed;
                    MaFeuille->MonObjet->Font->Style = TFontStyles()<< fsBold << fsUnderline;
            }
    }
    Les erreurs que j'ai sur ce bout de code qui me semble juste pr ce que je recherche... donc ici cest un test

    cursor nest appremment pas un membre de MonObjet ( tobject )
    et MonObjet nest pas un membre de MaFeuille ( tform)

    voila dc si tu vois ce qui va pas.... ca serait super!

    jenvois ladresse du composant et de la feuille a laquelle il appartient .... je pensais que cetait bon , faisable et une bonne idée mais appremment ....

  6. #6
    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
    Bonsoir,

    En tout cas, je n'ai pas l'impression que tu aies jeté un oeil au bout de code que j'ai posté (sans prétendre que celui ci soit particulièrement "juste", tu devrais pourtant pouvoir y trouver des éléments de réponse)...
    Tu ne peut pas travailler directement sur un TObject afin de répondre a toutes les actions des différents objets qui appellent ta fonction, il te faut "caster" et c'est pour ca que je proposais le 'dynamic_cast' (mais il y a surement d'autres facons de faire, et peut être mieux).
    Dans ton cas, tu ne peut pas utiliser ClassName(), il faut faire la comparaison avec ClassNameIs -> si par bonheur tu as C++Builder6, tu as donc un fichier d'aide tres bien détaillé, en tout cas un vrai fichier d'aide incomparablement miuex que celui du BDS donc n'hésites pas a l'éplucher.

    Bon courage,
    @+

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    bah je lepluches oui mais si je viens là cest que jai rien pu faire
    ton codes beh nous avons pas encore vu ca , et javoues ne pas avoir compris le code

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    La comme ca j'aurais dit que la spécialisation d'une classe Template fu créer dans ce but :

    http://cpp.developpez.com/faq/cpp/?p...specialisation

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    dsl detre chiant et borné , mais on peut vraiment pas faire quelque chose avec mon code ?
    Meme si jaime bien les votres , jaimerais avoir un code que je comprend et dont lidée vienne un peu de moi quand meme

  10. #10
    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
    Bonsoir,

    Surement qqchose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void __fastcall ActiverLien(TObject *MonObjet)
    {
            if ( MonObjet->ClassNameIs("TLabel") ) //ou MonObjet->ClassNameIs("TLabel") == true 
            {
                TLabel * p_lab = dynamic_cast < TLabel * > (MonObjet);
                       p_lab->Cursor=crHandPoint;
                       p_lab->Font->Color=clRed;
                       p_lab->Font->Style = TFontStyles()<< fsBold << fsUnderline;
            }
    }
    A tester,
    @+

  11. #11
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    Sinon je citerais bien la signature d'un membre de ce forum :

    "Au lieu de réinventer la roue, apprenons nous a nous en servir"

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Oui merci pour la citation
    Jai essayé ton code , avec le dynamic cast , le 1er , niquel cest ce que je recherchait

    Je nai pas compris certaines lignes de codes , je posterais dans la journée

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString Values[] = {"TEdit", "TLabel"};
    Tableau dynamique d'Ansi ?

    Citation Envoyé par Sunchaser Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int tabSize = sizeof(Values) / sizeof(AnsiString);
    Pas du tout compris

    Citation Envoyé par Sunchaser Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String class_sender = Sender->ClassName();
    Pas du tout compris

    Citation Envoyé par Sunchaser Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    switch(AnsiIndexStr(class_sender, &Values[0], tabSize))
    Pas du tout compris

    Citation Envoyé par Sunchaser Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lab = dynamic_cast < TLabel* >(Sender);
    Pas du tout compris

Discussions similaires

  1. Besoin de petits conseils
    Par Fabouney dans le forum Flash
    Réponses: 12
    Dernier message: 26/05/2006, 01h41
  2. Réponses: 3
    Dernier message: 23/05/2006, 11h03
  3. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 04h39
  4. Besoin d'un petit conseil
    Par Fabouney dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/06/2005, 21h47

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