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 :

Désactiver la molette dans une TStringGrid


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut Désactiver la molette dans une TStringGrid
    Bonjour,

    Dans mon programme j'utilise une TStringGrid ainsi que l'évènement OnSelectCell. Or ce dernier est activé lorsque l'on clique sur une cellule de la TStringGrid ou lorsque qu'on bouge la molette de la souris (ce qui fait qu'on se déplace dans la TStringGrid en modifiant l'index).
    Donc j'aimerais savoir s'il est possible de désactiver la roulette de la souris dans une TStringGrid.
    Merci



    PS : j'ai trouvé du code en Pascal mais rien de semblable avec C++ Builder..

  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
    Bonjour,
    J'ai une solution a proposer...Il te faut créer une class dérivant de TStringGrid et gérant le message WM_MOUSEWHEEL a sa manière :
    .dans le .h, avant la déclaration de la TForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class TMaGrille : public TStringGrid
    {
    public:
            void __fastcall OnMOUSEWHEEL(TMessage& msg);
     
            BEGIN_MESSAGE_MAP
                    MESSAGE_HANDLER(WM_MOUSEWHEEL,TMessage,OnMOUSEWHEEL)
            END_MESSAGE_MAP(TStringGrid)
     
            __fastcall TMaGrille(TComponent* Owner);
    };
    .dans le .h, dans la déclaration de la TForm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TMaGrille* AGrille;
    .dans le .cpp :
    1.pour la déclaration TMaGrille et la gestion du message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    __fastcall TMaGrille::TMaGrille(TComponent* Owner): TStringGrid(Owner)
    {
    Parent = ((TStringGrid*)Owner)->Parent;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMaGrille::OnMOUSEWHEEL(TMessage& msg)
    {
    //FAIRE AUTRECHOSE OU NE RIEN FAIRE ;)
    }
    //---------------------------------------------------------------------------
    2.pour créer une grille, par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AGrille = new TMaGrille(this);
    AGrille->Parent = this;
    AGrille->Top = 408;
    AGrille->Left = 240;
    for (int i = 1; i < 4; i ++)
    {
    AGrille->Cells[1][i] = AnsiString("Essai") + i;
    }
    Dans les faits, si rien n'est mis dans la gestion du message OnMOUSEWHEEL, effectivement rien ne se produit...l'inconvénient étant qu'il faut créer l'objet en dynamique et tout gérer par le code.
    Pour l'instant, j'ai pas d'autres idées...désolé

    //EDIT : c'était quoi le code en PASCAL ? ça pourrait être intéressant...

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Merci pour ta réponse, mais le problème c'est qu'une gestion dynamique de ma TStringGrid va me compliquer les choses...
    J'espère qu'il existe une autre solution...

  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
    Oui ça complique ...je le présageais.

    Quels sont les points qui vont bloquer ? Si jamais on pouvait éclaircir tout ça ...

  5. #5
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Voici un code qui devrait fonctionner (tirer d'un code Delphi pour la gestion de la molette dans un TDBGrid)

    Dans l'évènement OnCreate de la fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OldWindowProc = Grille->WindowProc;//sauvegarde ancien gestionnaire message Grille
    Grille->WindowProc = GrilleNewWindowProc;//mise en place du niveau gestionnaire
    Dans la partie private de la classe de ta Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TWndMethod OldWindowProc;
    void __fastcall GrilleNewWindowProc(TMessage &Msg);
    Code de la fonction de GrilleNewWindowProc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (Msg.Msg == WM_MOUSEWHEEL)//si message = molette souris
            return;//fin
     
    OldWindowProc(Msg);//gestion des autres messages à l'aide de l'ancienne routine
    Sur le test que j'ai fait, cela fonctionne.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 92
    Par défaut
    Merci bakaneko, ton code marche très bien.
    Par contre j'ai remarqué que le molette n'était pas la seule responsable de mon problème.

    En fait quand je clique sur deux des colonnes de ma grille, ça ouvre des nouvelles Forms pour saisir des données ou visualiser une image. Tout ça est normal.
    Mais lorsque je ferme la Form de ma TStringGrid, les autre Forms s'ouvrent à nouveau si elles avaient précédemment été ouvertes. J'ai l'impression que c'est dû au fait que lorsque je ferme la fenêtre avec ma TStringGrid, je remet le nombre de lignes à 2. J'ai testé sans et ça marche nickel.

    Au final je sais pas si la molette y était pour quelque chose ou pas mais je préférais quand même la désactiver. Merci

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2006, 17h28
  2. Comment sélectionner une ligne dans une TStringGrid ?
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 11
    Dernier message: 22/08/2005, 12h38
  3. Comment récupérer l'index du curseur dans une TStringGrid ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 2
    Dernier message: 26/04/2005, 09h17
  4. Récupérer les données interbase dans une TStringGrid
    Par Ousse dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/03/2005, 12h51
  5. Centrer le texte dans une TStringGrid
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/06/2004, 11h01

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