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 :

[BDS 2006] Lien et changement de font dans une statusbar


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut [BDS 2006] Lien et changement de font dans une statusbar
    Bonjour.
    Je dispose d'une statusbar dans ma form. Elle est composée de trois panel différents. Je souhaiterai, lors du passage de la souris sur un panel précis, mettre le texte en type lien et lorsque la souris part, remettre le texte en normal.
    De plus, lorsque l'on click sur ce même panel, je souhaiterai effectué une action. Mais mon problème vient du fait que cette action doit se faire uniquement sur ce panel là et pas les autres...
    Si quelqu'un a une idée SVP...????
    beaucoup d'avance
    développeur en folie cherche à ... développer encore plus

  2. #2
    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,
    J'ai un TStatusBar, avec 4 des 5 panels en Style ' psOwnerDraw '.
    Dans le OnMouseMove du StatusBar, je surveille les coordonnées survolées et je change la valeur d'un variable booléenne ( en private ).
    Si les coordonnées survolées correspondent a un TPanel particulier, je change la valeur de la variable booléenne et je lance un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StatusBar1->Refresh();
    Dans le OnDrawPanel, je gère le dessin des panels au cas par cas avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    switch (Panel->Index)
    //etc, etc
    et dans la partie du TPanel concerné, en fonction de l'état de la variable, j'applique une Fonte particulière ou non....

    En espérant être clair (pas gagné, je sais ), et t'aider,
    @ +
    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

  3. #3
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par Sunchaser
    Bonsoir,
    J'ai un TStatusBar, avec 4 des 5 panels en Style ' psOwnerDraw '.
    Dans le OnMouseMove du StatusBar, je surveille les coordonnées survolées et je change la valeur d'un variable booléenne ( en private ).
    Si les coordonnées survolées correspondent a un TPanel particulier, je change la valeur de la variable booléenne et je lance un petit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StatusBar1->Refresh();
    Dans le OnDrawPanel, je gère le dessin des panels au cas par cas avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    switch (Panel->Index)
    //etc, etc
    et dans la partie du TPanel concerné, en fonction de l'état de la variable, j'applique une Fonte particulière ou non....

    En espérant être clair (pas gagné, je sais ), et t'aider,
    @ +
    je pense avoir compris (mais je pourrais tester que demain... ) pour changer la font mais je ne vois pas comment, à partir de la fonction OnDrawPanel, détecter que l'utilisateur a cliqué et lancé ma fonction...?
    et sinon, la propriété font n'existe pas sur les textes des statusbar il me semble, comment faire alors pour lui affecter la font que je souhaite??
    d'avance à toi pour ton aide et aux autres qui m'aideront...
    développeur en folie cherche à ... développer encore 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
    Bonsoir,

    Tiendez monseigneur,
    Un morceau de mon code,
    En espérant qu'il fera votre bonheur...
    (rooo, 'tin je fais des rimes !)

    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
     
    void __fastcall TfrmPrincipale::StatusBar1DrawPanel(TStatusBar *StatusBar,
          TStatusPanel *Panel, const TRect &Rect)
    {
    TCanvas *pCanva = StatusBar->Canvas;
    switch (Panel->Index)
    {
            case 0:
            pCanva->Brush->Color = frmPrincipale->Color;
            pCanva->FillRect(Rect);
                    pCanva->Font->Color = clBlue;
                    pCanva->Font->Style = TFontStyles();
                    if (IndexPanelSurvol == 0)
                    {
                            StatusBar->Cursor = crHandPoint;
                            pCanva->Font->Style = TFontStyles() << fsBold << fsUnderline;
                    }
                    pCanva->TextRect(Rect, ((Rect.Width() - Panel->Text.Length()) / 4), Rect.Top + 1, Panel->Text);
            break;
            case 1:
            pCanva->Brush->Color = frmPrincipale->Color;
            pCanva->FillRect(Rect);
                    pCanva->Font->Color = clBlack;
                    pCanva->Font->Style = TFontStyles();
                    if (AffMaj == true)
                    {
                            pCanva->Font->Color = AColor;
                            pCanva->Font->Style = TFontStyles() << fsBold << fsUnderline;
                    }
                    pCanva->TextRect(Rect, Rect.Left + 40, Rect.Top + 1, Panel->Text);
            break;
            case 2:
            pCanva->Brush->Color = frmPrincipale->Color;
            pCanva->FillRect(Rect);
                     pCanva->Font->Color = clRed;
                     pCanva->Font->Style = TFontStyles();
                     if (IndexPanelSurvol == 2)
                     {
                            StatusBar->Cursor = crHandPoint;
                            pCanva->Font->Style = TFontStyles() << fsBold << fsUnderline;
                     }
                     pCanva->TextRect(Rect, Rect.Left + 60, Rect.Top + 1, Panel->Text);
            break;
            case 3:
            pCanva->Brush->Color = frmPrincipale->Color;
            pCanva->FillRect(Rect);
            Graphics::TIcon* pIco = new Graphics::TIcon;
            pIco->LoadFromFile(CheminAppli + AnsiString("\\Images\\Setting.ico"));
            pIco->Transparent = true;
            pIco->Height = Rect.Height();
            pIco->Width = Rect.Width();
                     pCanva->Draw(Rect.Left + 15, Rect.Top, pIco);
            delete pIco;
            break;
    }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TfrmPrincipale::StatusBar1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
    if ( X < 200 )
    {
    StatusBar1->Hint = "Clique droit sur cette zone afin de changer le nom d'utilisateur";
            IndexPanelSurvol = 0;//int en private
            StatusBar1->Refresh();
    }
    else
    {
            if ( X > 200 && X < 400 && frmPrincipale->StatusBar1->Panels->Items[1]->Text == "Fiches a enregistrer !")
            {
            StatusBar1->Hint = "Clique droit sur cette zone afin de faire défiler la liste des fiches";
                    IndexPanelSurvol = 1;//int en private
            }
            else
            {
                    if ( X > 402 && X < 601 )
                    {
                    StatusBar1->Hint = "Clique droit sur cette zone afin de faire apparaitre la page des RDV";
                            IndexPanelSurvol = 2; //int en private
                            StatusBar1->Refresh();
                    }
                    else
                    {
                            if ( X > 601 )
                            {
                            StatusBar1->Hint = "Clique droit sur cette zone afin de changer le mode de démarrage";
                            }
                    }
            }
    }
    }
    En espérant que tout ceci passe sous le BDS 2006 évidemment...

    En espérant t'aider,
    @ +

    ps : tiendez -> du verbe 'tiendre' évidemment...
    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 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
    Oublié : pour savoir un panel a été cliqué, tu peut observer la valeur de la variable changeant dans le OnMouseMove.
    Dans mon petit 'exemple', cette variable est IndexPanelSurvol.
    Après, au choix, agir soit dans le OnClick du StatusPanel, ou dans le OnMouseUp...
    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

  6. #6
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    ça m'a l'air encore une fois super ton truc. je teste tout de suite après manger et je te dis çca.
    développeur en folie cherche à ... développer encore plus

  7. #7
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    wouaou, tu es un génie, ça marche nickel.
    super super super...
    encore à toi...
    développeur en folie cherche à ... développer encore plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changement de fonte dans un tableau
    Par Ombre d'Horus dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 07/01/2008, 14h09
  2. Gestion des changement de JPanel dans une applet
    Par le Daoud dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/06/2006, 14h32
  3. Changement de nom dans une interface
    Par memed dans le forum Oracle
    Réponses: 6
    Dernier message: 27/10/2005, 18h20
  4. Réponses: 1
    Dernier message: 29/09/2005, 11h10
  5. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33

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