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 :

coordonnées cellule stringgrid sur click droit


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut coordonnées cellule stringgrid sur click droit
    bonjour,

    voila mon pb:
    j'ai une stringgrid dans laquelle, pour l'evenement DblClick j'ouvre une nouvelle form dont le contenu varie selon la ligne (Row) cliquée. ça ça marche.

    maintenant il faudrait que ça fonctionne aussi sur le click droit de la souris.
    pour l'instant ca m'ouvre la Form2 (en faisant un test du bouton sur le MouseUp) mais comme le selectCell n'est pas pris en compte je n'ai pas les infos de la lige ou j'ai fait mon click droit.

    Comment faire pour recupérer l'indice de la ligne de ma stringgrid?

  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
    Salut,
    Essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm4::DBGrid1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    if (Button == mbRight)
    {
    TGridCoord P = DBGrid1->MouseCoord(X,Y);
    int i = P.X - 1;
    DBGrid1CellClick(DBGrid1->Columns->Items[i]);
    }
    }
    @ +

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    merci de ta reponse mais si ca marche avec le DBgrid, avec la stringgrid ben ca va pas
    quand tu tapes:
    tu peux pas y faire correspondre un 'element' (qqchose en rapport avec une stringgrid ) de stringgrid

  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

    J'étais persuadé que l'on traitait d'un DBGrid .... désolé

  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
    Donc ça ferais :
    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
     
    void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    if (Button == mbRight)
    {
    TGridCoord P = StringGrid1->MouseCoord(X, Y);
    int i = P.X - 1;
    StringGrid1SelectCell(Sender, i, Y, true);
    }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
          int ARow, bool &CanSelect)
    {
    if (ACol == 2)
    {
    ShowMessage("ok");
    }
    }
    @ +

  6. #6
    Membre éprouvé

    Profil pro
    Cadre
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Par défaut
    Perso, j'avais fais un jeu de sudoku qui, lorsque l'on clikdroitai (en clair, cliquait à l'aide du bouton droit ), décrémentait le nombre qui se trouve dans la case survolée.

    Attention, voici le monstre
    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
    void __fastcall TForm1::SG1ContextPopup(TObject *Sender, TPoint &MousePos,
          bool &Handled)
    {
        long X=MousePos.x; //Contient la coordonnée X de la souris
        long Y=MousePos.y; //Contient la coordonnée Y de la souris
     
     
        int C, L;
        /*Dans les if..then qui suivent, je cherche la colonne dans laquelle se trouve la cellule sélectionnée, suivant la coordonnée X */
    if(X<30)
            C=0;
        else if(X>=30 && X<60)
            C=1;
        else if(X>=60 && X<90)
            C=2;
        else if(X>=90 && X<120)
            C=3;
        else if(X>=120 && X<150)
            C=4;
        else if(X>=150 && X<180)
            C=5;
        else if(X>=180 && X<210)
            C=6;
        else if(X>=210 && X<240)
            C=7;
        else if(X>=240)
            C=8;
     
        if(Y<30)
            L=0;
        else if(Y>=30 && Y<60)
            L=1;
        else if(Y>=60 && Y<90)
            L=2;
        else if(Y>=90 && Y<120)
            L=3;
        else if(Y>=120 && Y<150)
            L=4;
        else if(Y>=150 && Y<180)
            L=5;
        else if(Y>=180 && Y<210)
            L=6;
        else if(Y>=210 && Y<240)
            L=7;
        else if(Y>=240)
            L=8;
     
        //Je crée un rectangle de sélection sur la cellule de mon choix
        //Je sais, ce n'est pas la méthode la plus simple :s
        TGridRect myRect;
        myRect.Left = C;
        myRect.Top = L;
        myRect.Right = C;
        myRect.Bottom = L;
        SG1->Selection = myRect;
     
     
        ChangerChiffre(false); // Je change mon chiffre en le décrémentant
        VerifGrille(); //Je vérifie si la grille respecte les contraintes du sudoku
    }
    Voila du code à la Tenguryu barbare, très laid, très moche, et très lourd, mais très efficace. Notez que je cours-circuite l'évènement OnContextPopup
    Les chiffres que je place dans mes conditions correspondent aux largeurs et hauteurs des cases de mon stringgrid

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    merci a tous les deux.
    j'ai adapté ton code cantrelle et ça marche sans pb (je serais tenté de dire comme d'habitude).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm_ppale::StringGrid_gpmiMouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        if ( Button == mbRight) // Si le clic s'est produit sur le bouton droit
      {
        TGridCoord P = StringGrid_gpmi->MouseCoord(X, Y);
        int i = P.Y ;
        StringGrid_gpmiSelectCell(Sender, X, i, true);
        StringGrid_gpmiDblClick(Sender); // On fait comme pr le DbleClic
      }
    }
    tenguryu je n'ai pas essayé avec ton code mais ça aurait tres bien fait mon affaire aussi
    Voila du code à la Tenguryu barbare, très laid, très moche, et très lourd, mais très efficace.
    à choisir, je prefere du lourd qui marche que du léger qui plante

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

Discussions similaires

  1. VBA - Macro : Action sur click droit souris sur une cellule
    Par Raphael DIAZ dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/02/2011, 10h45
  2. [base de registre] Ouverture console DOS sur click droit
    Par SteelBox dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 11/02/2006, 02h02
  3. Sélection sur click droit
    Par anikeh dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 17h33
  4. [C#][DataGridView]Comment selectionner ligne sur Click Droit ?
    Par VincenzoR dans le forum Windows Forms
    Réponses: 12
    Dernier message: 23/12/2005, 22h34
  5. Couleur cellule stringgrid sur condition...
    Par kobe dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/08/2005, 13h49

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