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 :

Créer un composant mimant le menu de sélection de couleur de microsoft Excel


Sujet :

C++Builder

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Créer un composant mimant le menu de sélection de couleur de microsoft Excel
    Bonjour,

    Je souhaiterais créer un composant mimant le menu de sélection de couleur de microsoft Excel: un bouton qui lorsqu'on clique dessus, affiche une matrice de 8x5 couleurs. J'ai déjà développé quelques composants en VCL en surchargeant TGraphicControl mais ici je ne sais pas si c'est le bon choix... Je ne vois pas comment lorsque je clique sur bouton afficher un menu au-dessus... Vous voyez ça me turlupine au niveau du canvas si vous me permettez l'expression
    Pourriez-vous éclairer mes pensées obscures, svp?

    Merci!
    Cordialement,
    Rodrigue
    Rodrigue

  2. #2
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Personne ne voit comment faire ?
    En fait, il faudrait que j'affiche un popup lorsque je clique sur un bouton. Le popup serait le menu d'Excel que j'ai déjà créé...
    En gros un bouton dont je redessine le canvas -> pas très compliqué
    lorsque je clique sur ce bouton je dois afficher un menu popup mimant le menu de couleur d'Excel, j'ai besoin des évènements: OnMouseMove, OnMouseLeave, OnMouseClick ou OnMouseDown -> je bloque vraiment sur cette partie
    Rodrigue

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Dans quel sens "créér un composant" ?

    Peut-être qu'une form peut convenir pour cette histoire de boîte de couleurs.
    Soit en rajoutant (au plus simple) une fiche supplémentaire, soit en dérivant de TCustomForm.
    L'exploiter probablement avec :
    - BorderStyle = bsToolWindow // ou bsNone et là.....!
    - FormStyle = fsStayOnTop.

    Est-ce qu'elle doit se fermer automatiquement sur un clic et lorsque la souris sort de la zone client (donc si BorderStyle = bsNone) ?

    Sinon avec un TCustomControl... ou TGraphicControl
    - Parent = Form
    - BringToFront()
    - Objet->Visible = true

    Hélas ma version BCB3 Pro je n'ai pas OnMouseLeave... donc je suis obligé localement d'exploiter les OnMouseMove pour tester si l'objet est visible...

    A plus !

  4. #4
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut
    Citation Envoyé par Rodrigue
    Personne ne voit comment faire ?
    En fait, il faudrait que j'affiche un popup lorsque je clique sur un bouton. Le popup serait le menu d'Excel que j'ai déjà créé...
    En gros un bouton dont je redessine le canvas -> pas très compliqué
    lorsque je clique sur ce bouton je dois afficher un menu popup mimant le menu de couleur d'Excel, j'ai besoin des évènements: OnMouseMove, OnMouseLeave, OnMouseClick ou OnMouseDown -> je bloque vraiment sur cette partie
    Il y a quelquechose que je ne comprends pas...tu as déja crée le 'composant' et tu cherches a l'associer a l'élément de menu ? Ou c'est la création de cet éléme nt qui 'bloque' ?
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Bonjour,

    Merci pour vos réponses !
    henderson, j'ai également eu l'idée de fiche. Tout fonctionne impeccablement! Le seul problème est que lorsque je clique sur mon bouton, celui m'ouvre la form (contenant la palette de couleur) et donc, ma form principale perd le focus donc son titre se change en gris ... Il faut le voir mais quand on le sait, on se rend compte qu'il y a quelque chose qui cloche !

    Donc question, y-a-t'il moyen d'ouvrir une fiche secondaire sans faire perdre le focus à la fiche principale ou en tout cas qu'on le voit pas ?
    Sinon, je vais essayer d'afficher mon composant palette sur la fiche parent de mon composant bouton ... Je ne connaissais pas la fonction BringToFront(), cela devrait fonctionner aussi mais alors je n'ai plus à ma disposition, la méthode DeActivate pour fermer automatiquement le composant, il va falloir que je passe par d'autres fonctions, p-e OnEnter ou OnExit our alors faire un MESSAGE_MAP pour voir les messages lorsque on sort du composant ...
    Rodrigue

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Avec ma version BCB3 Pro je suis assez limité.

    Cela dit, s'il s'agit effectivement d'un composant, il doit présenter une certaine autonomie.

    Si on suppose que ce composant fait partie d'une palette de composants, que l'utilisateur va pouvoir placer n'importe où sur la fiche (donc aussi sur un composant enfant de la fiche), il va falloir controler son parent pour que ce dernier soit toujours la fiche. Voici la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class jColorPanel : public TCustomControl
    {
    public :
        __fastcall jColorPanel(TComponent *Owner);
        __fastcall ~jColorPanel();
        void __fastcall Paint();
     
        //Cette méthode aveugle jColorPanel::Show() héritée de TCustomControl
        //Par contre TCustomControl::Show() reste accessible depuis jColorPanel
        //Le paramètre sert à se positionner par rapport à l'objet depuis lequel
        //l'ouverture de la boite est commandée 
        void __fastcall Show(TWinControl *W);
    };

    Voici les méthodes :

    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
    42
    43
    44
    45
    46
    47
    48
    __fastcall jColorPanel::jColorPanel(TComponent *Owner)
        : TCustomControl(Owner)
    {
    //Pour la construction
    if(Owner->InheritsFrom(__classid(TWinControl))) Parent = (TWinControl*)Owner;
    SetBounds(0,0, 60,200);
    }
     
    __fastcall jColorPanel::~jColorPanel()
    {
    }
     
    void __fastcall jColorPanel::Show(TWinControl *W)
    {
    //Pour obliger le composant à se dessiner au dessus des autres
    //On commence par s'assurer d'avoir le bon Parent
    while(Parent->InheritsFrom(__classid(TForm)) == false)
        {
        Parent = Parent->Parent;
        }
    //Par dessus les autres objets
    BringToFront();
     
    //Calcul du positionnement (peut-être qu'il y a plus simple ???)
    TWinControl *Pa = W->Parent;
    int left = W->Left;
    int top = W->Top;
    while(Pa->InheritsFrom(__classid(TForm)) == false)
        {
        left = left + Pa->Left;
        top = top + Pa->Top;
        Pa = Pa->Parent;
        }
    SetBounds(left + W->Width, top, 60, 200);
     
    //ici, on va faire une pierre deux coups en sollicitant la méthode Show() héritée de TCustomControl
    //- Visible devient true
    //- Paint est sollicité
    TCustomControl::Show();
    }
     
    void __fastcall jColorPanel::Paint()
    {
    //Le dessin pour les couleurs
    //Ici c'est juste pour la démo
    Canvas->Brush->Color = (TColor)0x00FFEFDF;
    Canvas->FillRect(Rect(0,0,Width,Height));
    }
    J'ai testé (avec toolbar, plusieurs panels et 3 boutons) en essayant, en particulier, de pièger le raisonnement :

    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
    jColorPanel *ColorPanel;
     
    //--
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    ColorPanel = new jColorPanel(this);
    ColorPanel->Hide();
    //Petite tentative pour piéger le Parent
    ColorPanel->Parent = ToolBar1; //En fait c'est un coup d'épée dans l'eau
    }
     
    //--Ce bouton est sur une toolbar
    void __fastcall TForm1::SpeedButton1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    ColorPanel->Show((TWinControl*)Sender);
    }
     
    //--Ce bouton est posé sur la fiche
    void __fastcall TForm1::SpeedButton2MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    ColorPanel->Show((TWinControl*)Sender);
    }
     
    //--Ce bouton est au somment d'un empilement de panels
    void __fastcall TForm1::SpeedButton3MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    ColorPanel->Show((TWinControl*)Sender);
    }
    //--
    Voilà donc ce qui fonctionne. Pour le reste, il suffirait de faire :

    depuis le composant lui-même : Hide();
    à partir d'autres composants : ColorPanel->Hide();

    Probablement que l'on peut modifier le raisonnement. Ce n'est qu'un exemple en espérant que celà puisse être un bon début de solution !

    A plus !

  7. #7
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour vous deux....(et aux autres aussi )

    J'ai une proposition presque sérieuse a faire....
    Je pars d'un TToolButton, dans une TToolBar, pour lequel j'ai mis la propriété Style a tbsDropDown.
    J'affecte un TPopupMenu a la TToolBar, pour lequel je met la propriété OwnerDraw a true.
    Je ne met qu'un seul TMenuItem pour ce PopupMenu.

    Voila en gros pour ' l'environnement '...

    On lui affecte une taille de manière 'arbitraire', dans le OnMeasureItem :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm2::colorITMeasureItem(TObject *Sender,
          TCanvas *ACanvas, int &Width, int &Height)
    {
    Width = 100;
    Height = 100;
    }
    Dans le OnAdvancedDrawItem du TMenuItem, on peut imaginer dessiner des 'boutons' comme pour l'ajout d'un bouton dans la barre de titre d'une fenêtre...
    Cela donnerait :
    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
     
    tagRECT prect;
    //
    prect.left = ARect.left;
    prect.top = ARect.top;
    prect.right = ARect.right - 90;
    prect.bottom = ARect.bottom - 80;
            DrawFrameControl(ACanvas->Handle, &prect, DFC_BUTTON, DFCS_BUTTONPUSH);
    //
    prect.left = ARect.left + 24;
    prect.top = ARect.top;
    prect.right = ARect.right - 66;
    prect.bottom = ARect.bottom - 80;
            DrawFrameControl(ACanvas->Handle, &prect, DFC_BUTTON, DFCS_BUTTONPUSH);
    //
    //etc, etc....
    Après il faut repèrer la position de la souris au moment du click sur le TMenuItem, mais peut être peut on imaginer utiliser quelquechose comme
    PtInRect(...) si toutes les coordonées délimitants les carrés de couleur sont correctement renseignées; on pourra renseigner les paramètre 'RECT' de la fonction et savoir quelle zone du TMenuItem a été cliquée...

    Bon, je vais appronfondir cette idée, en espérant sortir qqchose de bon.
    D'ici, on aura peut être tous des cheveux blancs mais bon...

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  8. #8
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Merci pour vos réponses !
    J'ai réussi à créer mon composant tel que je le voulais... Je ne crée plus de fiche. J'ai créé un beau bouton qui m'affiche la couleur sélectionnée (possédant un évènement OnColorChange). J'ai créé un TCustomControl qui représente ma matrice de couleur.
    Lorsque je clique sur le bouton, je crée ce composant et je lui affecte comme parent la fiche sur laquelle est posée le bouton (maintenant il est vrai que je vais creuser la solution qu'Henderson a expliqué plus haut - super code au passage ! -pour que mon composant soit universel). Lorsque je sors du composant "couleur", je le rend invisible (super effet) alors que lorsque je clique dessus, je le rend invisible mais je triggue un évènement OnClick; mon bouton écoute cet évènement, il peut donc se rafraîchir et appelé son évènement OnColorChange. De cette manière, je suis averti à chaque changement de couleur. Bon ce n'est pas tout, j'ai rajouté quelques petits effets visuels...
    J'avais un bug: dans le destructeur de mon composant bouton, je regardais si le pointeur de mon dialogue "couleur" était nul si pas j'essayais de le détruire. Lorsque je créais un composant dynamiquement, je n'avais aucun problème, en utilisant cette méthode. Mais lorsque je le posais sur ma fiche, tout fonctionnait parfaitement à l'exécution, mais à la fermeture de ma fiche principale, j'avais une exception EAccessViolation. J'ai donc essayé de debugguer tout ça... Je me suis aperçu qu'en fait c'était la fiche qui détruisait mon composant dialogue couleur mais qu'elle ne remettait pas son pointeur à NULL. Après elle détruisait mon bouton, qui essayait également de détruire mon composant "couleur"... Donc boom! Ma parade, déjà expliquée plus haut, quand je clique sur le bouton je crée le dialogue couleur, quand celui est fermé (deuxième évènement que je n'avais pas encore cité), je détruis la fenêtre.
    Rodrigue

  9. #9
    Membre expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,
    Je me permet de rajouter une idée, qui rejoint presque finalement l'idée d'Henderson...
    Une classe dérivée d'une TPaintBox :
    .dans le .h:
    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
     
    class TColorPaint : public TPaintBox
    {
    protected :
            TMouseMoveEvent AOnMouseMove;
            virtual void __fastcall Paint(void);
    public:
            //
            tagRECT coordObj[4];
            TRect rectCol[3];
            int numRect;
            //
            __fastcall TColorPaint(TComponent* AOwner);
            void __fastcall MouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
            void __fastcall MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall DeviationMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
    };
    .dans le .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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    __fastcall TColorPaint::TColorPaint(TComponent* AOwner) : TPaintBox(AOwner)
    {
    ((TForm*)Owner)->DoubleBuffered = true;
    SetBounds(0,0,100,100);
    //TRect
    rectCol[0].left = 2;
    rectCol[0].top = 2;
    rectCol[0].right = 22;
    rectCol[0].bottom = 22;
    //
    rectCol[1].left = 26;
    rectCol[1].top = 2;
    rectCol[1].right = 46;
    rectCol[1].bottom = 22;
    //
    rectCol[2].left = 50;
    rectCol[2].top = 2;
    rectCol[2].right = 70;
    rectCol[2].bottom = 22;
    //
    //tagRECT
    coordObj[0].left = 0;
    coordObj[0].top = 0;
    coordObj[0].right = 100;
    coordObj[0].bottom = 100;
    //
    coordObj[1].left = rectCol[0].left + 1;
    coordObj[1].top = rectCol[0].top + 1;
    coordObj[1].right = rectCol[0].right - 1;
    coordObj[1].bottom = rectCol[0].bottom - 1;
    //
    coordObj[2].left = rectCol[1].left + 1;
    coordObj[2].top = rectCol[1].top + 1;
    coordObj[2].right = rectCol[1].right - 1;
    coordObj[2].bottom = rectCol[1].bottom - 1;
    //
    coordObj[3].left = rectCol[2].left + 1;
    coordObj[3].top = rectCol[2].top + 1;
    coordObj[3].right = rectCol[2].right - 1;
    coordObj[3].bottom = rectCol[2].bottom - 1;
    //
    this->OnMouseMove = TColorPaint::MouseMove;
    this->OnMouseUp = TColorPaint::MouseUp;
    AOnMouseMove = ((TForm*)this->Owner)->OnMouseMove;
    ((TForm*)this->Owner)->OnMouseMove = DeviationMouseMove;
    //
    }
    //---------------------------------------------------------------------------
    void __fastcall TColorPaint::Paint()
    {
    Canvas->Brush->Color = clMenu;
    Canvas->FillRect(Canvas->ClipRect);
    //
    DrawEdge(Canvas->Handle, &coordObj[0], BDR_RAISEDINNER, BF_RECT);
    //
    Canvas->Brush->Color = clRed;
    Canvas->FrameRect(rectCol[0]);
    Canvas->FillRect(rectCol[0]);
     
    Canvas->Brush->Color = clBlue;
    Canvas->FrameRect(rectCol[1]);
    Canvas->FillRect(rectCol[1]);
     
    Canvas->Brush->Color = clGreen;
    Canvas->FrameRect(rectCol[2]);
    Canvas->FillRect(rectCol[2]);
    //
            if ( numRect != -1 )
            {
                    switch (numRect)
                    {
                            case 0:
                                    Canvas->Brush->Color = clRed;
                            break;
                            case 1:
                                    Canvas->Brush->Color = clBlue;
                            break;
                            case 2:
                                    Canvas->Brush->Color = clGreen;
                            break;
                    }
                    Canvas->Rectangle(rectCol[numRect]);
                    DrawEdge(Canvas->Handle, &coordObj[numRect + 1], BDR_SUNKENINNER, BF_RECT);
            }
    }
    //---------------------------------------------------------------------------
    void __fastcall TColorPaint::MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
    {
    ((TForm*)this->Owner)->OnMouseMove = DeviationMouseMove;
    TPoint apoint;
    apoint.x  = X;
    apoint.y = Y;
    numRect = -1;
                    if ( PtInRect(&rectCol[0], apoint) == true )
                    {
                            numRect = 0;
                    }
                    if ( PtInRect(&rectCol[1], apoint) == true )
                    {
                            numRect = 1;
                    }
                    if ( PtInRect(&rectCol[2], apoint) == true )
                    {
                            numRect = 2;
                    }
    Repaint();
    }
    //---------------------------------------------------------------------------
    void __fastcall TColorPaint::MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    switch (numRect)
    {
            case 0:
                    ShowMessage("rouge");
            break;
            case 1:
                    ShowMessage("bleu");
            break;
            case 2:
                    ShowMessage("vert");
            break;
            default:
     
            break;
    }
    Visible = false;
    }
    //---------------------------------------------------------------------------
    void __fastcall TColorPaint::DeviationMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
    {
    this->Visible = false;
    ((TForm*)this->Owner)->OnMouseMove = AOnMouseMove;
    }
    //---------------------------------------------------------------------------
    Dans la TForm, j'ai déclaré :
    et fais un essai avec un ToolButton...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TForm2::ToolButton1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    TRect rectobj = ToolBar1->ClientRect;
    if (pCP == NULL)
    {
    pCP = new TColorPaint(this);
    pCP->Parent = this;
    }
    pCP->Show();
    pCP->Left = rectobj.left;
    pCP->Top = rectobj.bottom + 2;
    }
    Je n'ai pas testé le positionnement exactement comme l'avais tenté henderson, a voir plus tard...

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

Discussions similaires

  1. Menu de sélection de couleur
    Par Mythrandil dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 19/08/2009, 15h32
  2. [List] Créer mon composant
    Par soad dans le forum Composants
    Réponses: 3
    Dernier message: 02/12/2005, 08h00
  3. Quel est le composant sélectionné /DBGrid et multi sélection
    Par lol_adele dans le forum Composants VCL
    Réponses: 17
    Dernier message: 02/09/2005, 09h27
  4. [vb.net] Impossible de créer le composant ActiveX [win98]
    Par arnolem dans le forum Windows Forms
    Réponses: 10
    Dernier message: 12/07/2005, 12h09
  5. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41

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