Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1409 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  demineur clic droit C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

demineur clic droit C++

n°1342574
Bigdai
Posté le 09-04-2006 à 22:14:32  profilanswer
 

Salut à tous :)  
 
Je suis un newbie concernant la programmation. Je dois réaliser pour un projet info, un démineur, je le réalise avec le logiciel builder 5.
J'utilise pour ca une drawgrid mais je n'arrive pas a mettre en place le clic droit de la souris pour faire apparaitre le drapeau. :pt1cable:  
J'ai fait pas mal de recherche à ce niveau mais toutes les solutions que j'ai trouvé ne m'ont pas permise de résoudre le problème.
 
Merci d'avance pour votre aide. :)  

mood
Publicité
Posté le 09-04-2006 à 22:14:32  profilanswer
 

n°1342591
Trap D
Posté le 09-04-2006 à 22:26:52  profilanswer
 

Gère l'évènement OnMouseUp sur le DrawGrid, Tu peux recalculer la cellule à partir des coordonnées X et Y de la souris avec la méthode void __fastcall MouseToCell(int X, int Y, int &ACol, int &ARow);

n°1343080
Bigdai
Posté le 10-04-2006 à 14:56:46  profilanswer
 

Trap D a écrit :

Gère l'évènement OnMouseUp sur le DrawGrid, Tu peux recalculer la cellule à partir des coordonnées X et Y de la souris avec la méthode void __fastcall MouseToCell(int X, int Y, int &ACol, int &ARow);


 
J'ai deja tente cette solution que j'avais deja trouve sur le net. En fait il me manque des instructions pour que ca puisse marcher et ca me pose toujours des problemes. :(  

n°1343086
Bigdai
Posté le 10-04-2006 à 14:59:52  profilanswer
 

void __fastcall TForm1::DrawGrid1MouseDown(TObject *Sender,  
      TMouseButton Button, TShiftState Shift, int X, int Y)  
{  
if(Button == mbRight)  
    {  
    int Column;  
    int Row;  
    DrawGrid1->MouseToCell(X, Y, Column, Row);  
    StatusBar1->SimpleText = IntToStr(Column) + ',' + IntToStr(Row);  
    }
 
C'est un morceau de programme que j'ai trouvé sur le net pour faire fontionner le clic droit de la souris mais le statusbar1 il me pose des probleme car il est pas reconnu.

n°1345669
videaste95
je ne sais rien !
Posté le 13-04-2006 à 00:42:18  profilanswer
 

Bigdai a écrit :

void __fastcall TForm1::DrawGrid1MouseDown(TObject *Sender,  
      TMouseButton Button, TShiftState Shift, int X, int Y)  
{  
if(Button == mbRight)  
    {  
    int Column;  
    int Row;  
    DrawGrid1->MouseToCell(X, Y, Column, Row);  
    StatusBar1->SimpleText = IntToStr(Column) + ',' + IntToStr(Row);  
    }
 
C'est un morceau de programme que j'ai trouvé sur le net pour faire fontionner le clic droit de la souris mais le statusbar1 il me pose des probleme car il est pas reconnu.


Normalement avec X et Y, tu dois trouver la case où se situe le pointeur de la souris. Je ne me souviens pas pourquoi j'ai fait le calcul de l'emplacement de la case plutôt que d'utiliser MouseToCell(). La barre d'état ne sert que pour indiquer cette position (Column et Row). Ci-dessous un exemple de traitement du clic droit qui fonctionne en BCC 6.

Code :
  1. void __fastcall TForm1::DrawGrid1MouseUp(TObject *Sender,
  2.       TMouseButton Button, TShiftState Shift, int X, int Y)
  3. {
  4.   if(Button == mbRight)
  5.   {
  6.     PasDeClic = true;                                                      // pour éviter une action pendant le traitement
  7.     DrawGrid1->Col = X / lg;                                            // lg = largeur et hauteur d'une case
  8.     DrawGrid1->Row = Y / lg;
  9.     if(TabCase[DrawGrid1->Col][DrawGrid1->Row] == 0)      // si la case est vierge on y place un drapeau (-1)
  10.     {
  11.       TabCase[DrawGrid1->Col][DrawGrid1->Row] = -1;
  12.       nbMinesLaissees--;                                               
  13.       TestFin();
  14.     }
  15.     else if(TabCase[DrawGrid1->Col][DrawGrid1->Row] == -1)
  16.     {
  17.       TabCase[DrawGrid1->Col][DrawGrid1->Row] = 0;
  18.       nbMinesLaissees++;
  19.     }
  20.     Edit1->Text = AnsiString().sprintf("% 4d", nbMinesLaissees);    // Compteur de mines  
  21.     DrawGrid1->Invalidate();
  22.   }
  23.   PasDeClic = false;
  24. }


Message édité par videaste95 le 13-04-2006 à 00:48:39
n°1346830
Bigdai
Posté le 14-04-2006 à 12:35:07  profilanswer
 

J'ai essayé le programme mais ca ne marche pas.
Il me dit que lg n'est pas défini et je ne vois pas comment le définir.

n°1346839
Bigdai
Posté le 14-04-2006 à 12:51:39  profilanswer
 

Ca passe mais lorsque je fais un clic droit il me fait une erreur par rapport à la grille et il debug.

n°1347202
videaste95
je ne sais rien !
Posté le 14-04-2006 à 22:01:36  profilanswer
 

  C'est vrai que la partie la plus importante du programme est appelée par l'événement OnDrawCell. On peut ignorer " lg " si on utilise MouseToCel.

n°1348395
Bigdai
Posté le 17-04-2006 à 22:52:08  profilanswer
 

C'est bon.  
Problème résolu. J'ai réussi à faire marcher le clic droit.
Merci à tous ceux qui m'ont aidé à le faire.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  demineur clic droit C++

 

Sujets relatifs
changer la valeur d'un jbutton quand je clic dessusclic droit dans textbox
.Java limiter l'accès selon droit utilisateur ?
Automatiser: clic sur "envoyer" d'un emailLancer une action sur un clic dans combo
Le demineurclic sur une image en php
Droit d'accès aux fichiers 
Plus de sujets relatifs à : demineur clic droit C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR