demineur clic droit C++

demineur clic droit C++ - C++ - Programmation

Marsh Posté le 09-04-2006 à 22:14:32    

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. :)  

Reply

Marsh Posté le 09-04-2006 à 22:14:32   

Reply

Marsh Posté le 09-04-2006 à 22:26:52    

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);

Reply

Marsh Posté le 10-04-2006 à 14:56:46    

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. :(  

Reply

Marsh Posté le 10-04-2006 à 14:59:52    

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.

Reply

Marsh Posté le 13-04-2006 à 00:42:18    

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
Reply

Marsh Posté le 14-04-2006 à 12:35:07    

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.

Reply

Marsh Posté le 14-04-2006 à 12:51:39    

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

Reply

Marsh Posté le 14-04-2006 à 22:01:36    

  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.

Reply

Marsh Posté le 17-04-2006 à 22:52:08    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed