Je bloque sérieusement sur un problème, j'ai beau chercher une solution, au bout d'un moment cella ne fonctionne pas
 
 Voilà mon histoire:
J'ai une image ou est dessiner un tableau ou chaque cellule fais 7 / 7 en interne sans compter les borts car les cellules se touchent
Quand je clique sur mon image, la cellule cliquer deviens rouge (Je redessine l'image en remplissant la cellule de rouge), s'il a déjà une cellule sélectionné, je la remplie de blanc, bref
Je voudrais calculer dans quel cellule c'est produit le clique en X et en Y égale à mon tableau mais j'y arrive pas !
C'est surement tout bête comme solution mais je coince
 
 Quand je clique, je renvoie la position du clique en X et en Y dans cette image, il faut alors convertir ça en X et Y de la cellule cliquer = à mon tableau
Je sais pas comment expliquer
 
 Le mieux est de vous passer le code, même s'il est long, vous pourrez le tester par vous même et vous rendre compte de mon problème
Vous verrez que quand je clique sur l'image, la cellule deviens rouge et la position de la cellule par un calcule est renvoyer.
ça fonctionne pendent un moment mais au bout d'un moment ça ne fonctionne plus à cause de l'arrondis je suppose car des fois
suivent ou on clique dans la cellule, des résultats différents peuvent apparaitre !
J’espère que vous pourrez m'aider, le code n'est pas fini

Code : Tout sélectionner
Procedure.l IsMouseOverGadget(Gadget) 
  
  Protected.i SourisPosX, SourisPosY, GadgetPosX, GadgetPosY, GadgetLargeur, GadgetHauteur, FenetreActive
  
  FenetreActive = GetActiveWindow()
  
  If IsWindow(FenetreActive)
    GadgetPosX = GadgetX(gadget,#PB_Gadget_WindowCoordinate)
    GadgetPosY = GadgetY(gadget,#PB_Gadget_WindowCoordinate)
    GadgetLargeur = GadgetWidth(gadget)
    GadgetHauteur = GadgetHeight(gadget)
    SourisPosX = WindowMouseX(FenetreActive)
    SourisPosY = WindowMouseY(FenetreActive)
  Else
    ProcedureReturn #False
  EndIf
  
  If SourisPosX < GadgetPosX
    ProcedureReturn #False
  EndIf
  
  If SourisPosX >= (GadgetPosX+GadgetLargeur)
    ProcedureReturn #False
  EndIf
  
  If SourisPosY < GadgetPosY
    ProcedureReturn #False
  EndIf
  
  If SourisPosY >= (GadgetPosY+GadgetHauteur)
    ProcedureReturn #False
  EndIf
  
  ProcedureReturn #True
  
EndProcedure 
Procedure RoundStep(Nombre.i, Pas.i)
  Protected Retour.i
  
  Retour = (Nombre / Pas) * Pas
  If Nombre % Pas > Pas / 2
    Retour + Pas
  EndIf
 
  ProcedureReturn Retour
EndProcedure
Procedure.s CalculePositionCellule(CliqueX, CliqueY)
  
  ClearDebugOutput()
  
  Debug "X = " + Str(CliqueX)
  Debug "Y = " + Str(CliqueY)
  Debug "----------"
  
  CliqueX = CliqueX - 1
  CliqueY = CliqueY - 1
  
  Debug "----------"
  Debug Str(CliqueX + 1) + " - 1 = " + Str(CliqueX)
  Debug Str(CliqueY + 1) + " - 1 = " + Str(CliqueY)
  
  OpperationX1 = Int(CliqueX / 7)
  OpperationY1 = Int(CliqueY / 7)
  
  Debug "----------"
  Debug Str(CliqueX) + " / 7 = " + Str(OpperationX1)
  Debug Str(CliqueY) + " / 7 = " + Str(OpperationY1)
  
  OpperationX2 = CliqueX - OpperationX1
  OpperationY2 = CliqueY - OpperationY1
  
  Debug "----------"
  Debug Str(CliqueX) + " - " + Str(OpperationX1) + " = " + Str(OpperationX2)
  Debug Str(CliqueY) + " - " + Str(OpperationY1) + " = " + Str(OpperationY2)
  
  OpperationX3 = Int(OpperationX2 / 7)
  OpperationY3 = Int(OpperationY2 / 7)
  
  Debug "----------"
  Debug Str(OpperationX2) + " / 7 = " + Str(OpperationX3)
  Debug Str(OpperationY2) + " / 7 = " + Str(OpperationY3)
  
  If OpperationX3 < 0
    OpperationX3 = 0
  EndIf
  
  If OpperationY3 < 0
    OpperationY3 = 0
  EndIf
  
  Debug "----------"
  Debug "Résultat finale X = " + Str(OpperationX3)
  Debug "Résultat finale Y = " + Str(OpperationY3)
  Debug "----------"
  
  If CliqueX => 0 And CliqueY => 0
    
    
    
  Else
    ProcedureReturn "Aucune"
    
  EndIf
  
  ProcedureReturn ""
  
EndProcedure
; Procédure pour dessiner un tableau
Procedure.l DessinerTableau(Array Tableau.l(2))
  
  Fenetre = OpenWindow(#PB_Any, 0, 0, 794, 616, "Aperçus du Tableau", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  WindowBounds(Fenetre, 253, 201, 9999, 9999) 
  SmartWindowRefresh(Fenetre, 1) 
  
  MenuSysteme = CreatePopupImageMenu(#PB_Any, #PB_Menu_ModernLook)
  
  MenuItem(1, "Ouvrir"   +Chr(9)+"Ctrl+O")
  MenuItem(2, "Enregistrer"   +Chr(9)+"Ctrl+S")
  MenuItem(3, "Enregistrer sous"+Chr(9)+"Ctrl+R")
  MenuItem(4, "Fermer"  +Chr(9)+"Ctrl+F")
  
  PanelGadget = PanelGadget(#PB_Any, 1, 1, 794, 615)
  AddGadgetItem(PanelGadget, 1, "Valeur Celule", 0, 0)
  
  TextGadgetInformationValeurCelule = TextGadget(#PB_Any, 5, 5, 100, 15, "X: 0, Y: 0, T: 0")
  
  AddGadgetItem(PanelGadget, 0, "Tableau", 0, 0)
  SetGadgetState(PanelGadget, 0)
  
  ScrollAreaGadget = ScrollAreaGadget(#PB_Any, 0, 0, GadgetWidth(PanelGadget) - 8, GadgetHeight(PanelGadget) - 27, 8162, 8162, 10, #PB_ScrollArea_Flat)
  ImageGadget = ImageGadget(#PB_Any, 0, 0, 8162, 8162, 0)
  
  CloseGadgetList()
  
  ImageTableau = CreateImage(#PB_Any, 8162, 8162, 24, RGB(255, 255, 255))
  
  ; Création des celules du tableau en les dessinant sur l'image
  StartDrawing(ImageOutput(ImageTableau))
  
  DrawingMode(#PB_2DDrawing_Outlined)
  
  For X = 0 To ArraySize(Tableau.l(), 1)
    
    For Y = 0 To ArraySize(Tableau.l(), 2)
      
      Box(X * 8 + 1, Y * 8 + 1, 9, 9, RGB(200, 200, 200))
      
    Next
    
  Next
  
  StopDrawing()
  
  SetGadgetState(ImageGadget, ImageID(ImageTableau))
  
  Repeat
    
    Event = WaitWindowEvent()
    
    If IsMouseOverGadget(ImageGadget) And Event = 516
      InterupteurCliqueDroitImageGadget = 1
      
    ElseIf IsMouseOverGadget(ImageGadget) And (Event = 517 And InterupteurCliqueDroitImageGadget = 1)
      InterupteurCliqueDroitImageGadget = 0
      DisplayPopupMenu(MenuSysteme, WindowID(Fenetre)) 
      
    ElseIf Not IsMouseOverGadget(ImageGadget) And (Event = 517 And InterupteurCliqueDroitImageGadget = 1)
      InterupteurCliqueDroitImageGadget = 0
      
    EndIf
    
    If IsMouseOverGadget(ImageGadget) And Event = 513
      InterupteurCliqueGaucheImageGadget = 1
      
      SauvegardeCliqueX = WindowMouseX(Fenetre) - 5 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_X)
      SauvegardeCliqueY = WindowMouseY(Fenetre) - 25 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_Y)
      
    ElseIf IsMouseOverGadget(ImageGadget) And (Event = 514 And InterupteurCliqueGaucheImageGadget = 1)
      InterupteurCliqueGaucheImageGadget = 0
      
      CliqueX = WindowMouseX(Fenetre) - 5 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_X)
      CliqueY = WindowMouseY(Fenetre) - 25 + GetGadgetAttribute(ScrollAreaGadget, #PB_ScrollArea_Y)
      
      If (CliqueX > 1 And CliqueY > 1) And (CliqueX = SauvegardeCliqueX And CliqueY = SauvegardeCliqueY)
        
        StartDrawing(ImageOutput(ImageTableau))
        CouleurClique = Point(CliqueX,CliqueY)
        StopDrawing()
        
        If CouleurClique <> RGB(200, 200, 200)
          SauvegardePrecedentClique$ = Str(CliqueX) + ", " + Str(CliqueY)
          
          If IsImage(ImageTableauCopie)
            FreeImage(ImageTableauCopie)
          EndIf
          
          ImageTableauCopie = CopyImage(ImageTableau, #PB_Any)
          
          StartDrawing(ImageOutput(ImageTableauCopie))
          FillArea(Val(StringField(SauvegardePrecedentClique$, 1, ", ")), Val(StringField(SauvegardePrecedentClique$, 2, ", ")), -1, RGB(255, 255, 255))
          FillArea(CliqueX, CliqueY, -1, RGB(255, 0, 0))
          StopDrawing()
          
          SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
          SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
          
        EndIf
        
      EndIf
      
    ElseIf Not IsMouseOverGadget(ImageGadget) And (Event = 514 And InterupteurCliqueGaucheImageGadget = 1)
      InterupteurCliqueGaucheImageGadget = 0
      
    EndIf
    
    Select Event
        
        
        
      Case 512 ; Déplacement de la souris sur la fenêtre
        
        If IsMouseOverGadget(ImageGadget)
          
          
          
        EndIf
        
      Case 161
        If IsImage(ImageTableauCopie)
          SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
          SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
        Else
          If IsImage(IsImage(ImageTableau))
            SetGadgetState(ImageGadget, ImageID(ImageTableau))
            SetGadgetText(TextGadgetInformationValeurCelule, "X: 0, Y: 0, T: 0")
          EndIf
        EndIf
        
      Case 513 ; Bouton gauche appuiler avec la souris sur la fenêtre
        
      Case 514 ; Bouton gauche relacher avec la souris sur la fenêtre
        
      Case 515 ; Double clique gauche avec la souris sur la fenêtre
        
      Case 516 ; Bouton droit appuiler avec la souris sur la fenêtre
        
      Case 517 ; Bouton droit relacher avec la souris sur la fenêtre
        
      Case 518 ; Double clique droit avec la souris sur la fenêtre
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case 1
            
            
            
        EndSelect
        
      Case #PB_Event_SizeWindow
        ResizeGadget(PanelGadget, #PB_Ignore, #PB_Ignore, WindowWidth(Fenetre), WindowHeight(Fenetre) - 1)
        ResizeGadget(ScrollAreaGadget, #PB_Ignore, #PB_Ignore, GadgetWidth(PanelGadget) - 8, GadgetHeight(PanelGadget) - 27)
        
        If IsImage(ImageTableauCopie)
          SetGadgetState(ImageGadget, ImageID(ImageTableauCopie))
          SetGadgetText(TextGadgetInformationValeurCelule, CalculePositionCellule(CliqueX, CliqueY) + ", T: " + Str(TableauTaille))
        Else
          If IsImage(IsImage(ImageTableau))
            SetGadgetState(ImageGadget, ImageID(ImageTableau))
            SetGadgetText(TextGadgetInformationValeurCelule, "X: 0, Y: 0, T: 0")
          EndIf
        EndIf
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
  
EndProcedure
; Mini = 85, 65
; Maxi = 1019, 1019
Dim MonTableau.l(1019, 1019)
DessinerTableau(MonTableau.l())
 
 


