Page 1 sur 1

Je suis sur quelle fenêtre ???? (Résolut)

Publié : lun. 22/avr./2019 10:33
par MLD
J'ai un programme avec deux fenêtres, un peu comme le code ci-dessous.
Je voudrais par un simple survol de la souris savoir quelle fenêtre est survolée. (sans cliquer sur une des fenêtres)
Je patine un peu ou j'ai oublier l'api qui va bien.
Merci d'avance.

Code : Tout sélectionner

Enumeration 0 ; Id. Fenêtres
      #FENETRE1
      #FENETRE2
EndEnumeration
Enumeration 0 ; Id. Gadgets
      #FEN1_BOUTON
      #FEN1_FERMER
      #FEN2_FERMER
EndEnumeration

If OpenWindow(#FENETRE1, 0, 0, 640, 480, "Fenêtre 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      
     
            ButtonGadget(#FEN1_BOUTON, 5,  5, 100, 22, "Ouvrir Fenêtre 2")
            ButtonGadget(#FEN1_FERMER, 5, 45, 100, 22, "Quitter")
      
      
      Repeat
            
            Evenement.l = WaitWindowEvent()
            
            Select EventWindow()
                        
                        ;=====================================================
                        ;== EVENEMENTS DE LA FENETRE PRINCIPALE
                        ;=====================================================
                        
                  Case #FENETRE1
                        
                        Select Evenement
                                    
                              Case #PB_Event_Gadget
                                    
                                    Select EventGadget()
                                                
                                          Case #FEN1_BOUTON
                                                If OpenWindow(#FENETRE2, 0, 0, 320, 240, "Fenêtre 2", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
                                                  StickyWindow(#FENETRE2 , 1)   
                                                            ButtonGadget(#FEN2_FERMER, 5, 5, 100, 22, "Fermer")
                                                     
                                                EndIf
                                                
                                          Case #FEN1_FERMER
                                                Break
                                                
                                    EndSelect
                                    
                              Case #PB_Event_CloseWindow
                                    Break
                                    
                        EndSelect
                        
                        ;=====================================================
                        ;== EVENEMENTS DE LA FENETRE SECONDAIRE
                        ;=====================================================
                        
                  Case #FENETRE2
                        
                        Select Evenement
                                    
                              Case #PB_Event_Gadget
                                    
                                    If EventGadget() = #FEN2_FERMER
                                          CloseWindow(#FENETRE2)
                                    EndIf
                                    
                              Case #PB_Event_CloseWindow
                                    
                                    CloseWindow(#FENETRE2)
                                    
                        EndSelect
                        
            EndSelect
            
      ForEver
      
EndIf




Re: Je suis sur quelle fenêtre ????

Publié : lun. 22/avr./2019 11:43
par Ar-S
Petit code de Lunasol (modifié) à adapter

Code : Tout sélectionner

EnableExplicit

Define CURSOR.q ; this is POINT structure by fact
Define hWnd

Define MyWindow1 = OpenWindow(#PB_Any, 0, 0, 250, 50, "1")
Define MyWindow2 = OpenWindow(#PB_Any, 250, 0, 250, 50, "2")

Repeat
   If WaitWindowEvent(1) = #PB_Event_CloseWindow
      Break
   EndIf
   
   GetCursorPos_(@CURSOR) ; get cursor pos
   hWnd = WindowFromPoint_(CURSOR) ; get window handle under specified cursor pos (excluding hidden/disabled windows)
   
   If hWnd = WindowID(MyWindow1)
      SetActiveWindow(MyWindow1)
   ElseIf hWnd = WindowID(MyWindow2)
      SetActiveWindow(MyWindow2)
   EndIf
   
   Delay(64)
ForEver

Re: Je suis sur quelle fenêtre ????

Publié : lun. 22/avr./2019 11:48
par cage
Bonjour MLD,

Deux petites remarques pour commencer:
Utilise toujours EnableExplicit au début de tes codes
Réduit le nombre d'espaces générés par la touche tabulation (2 c'est suffisant) pour rendre ton code plus lisible et évite de trop mettre de lignes blanches.

Voici une solution sans API

Code : Tout sélectionner

EnableExplicit

Enumeration 0 ; Id. Fenêtres
      #FENETRE1
      #FENETRE2
EndEnumeration

Enumeration 0 ; Id. Gadgets
  #FEN1_CANVAS
  #FEN1_BOUTON
  #FEN1_FERMER
  #FEN2_CANVAS
  #FEN2_FERMER
EndEnumeration

Define Evenement.l

If OpenWindow(#FENETRE1, 0, 0, 640, 480, "Fenêtre 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CanvasGadget(#FEN1_CANVAS, 0, 10, 640, 480, #PB_Canvas_Container)
    GadgetToolTip(#FEN1_CANVAS, "Je suis la fenêtre 1")
    ButtonGadget(#FEN1_BOUTON, 5,  5, 100, 22, "Ouvrir Fenêtre 2")
    ButtonGadget(#FEN1_FERMER, 5, 45, 100, 22, "Quitter")
  CloseGadgetList()
  Repeat
    Evenement = WaitWindowEvent()
    Select EventWindow()
      ;=====================================================
      ;== EVENEMENTS DE LA FENETRE PRINCIPALE
      ;=====================================================
      Case #FENETRE1
        Select Evenement
          Case #PB_Event_Gadget
            Select EventGadget()
              Case #FEN1_BOUTON
                If OpenWindow(#FENETRE2, 0, 0, 320, 240, "Fenêtre 2", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
                  CanvasGadget(#FEN2_CANVAS, 0, 10, 640, 480, #PB_Canvas_Container)
                    GadgetToolTip(#FEN2_CANVAS, "Je suis la fenêtre 2")
                    ButtonGadget(#FEN2_FERMER, 5, 5, 100, 22, "Fermer")
                  CloseGadgetList()
                  StickyWindow(#FENETRE2 , 1)
                EndIf
              Case #FEN1_FERMER
                Break
            EndSelect
          Case #PB_Event_CloseWindow
            Break
        EndSelect
      ;=====================================================
      ;== EVENEMENTS DE LA FENETRE SECONDAIRE
      ;=====================================================
      Case #FENETRE2
        Select Evenement
          Case #PB_Event_Gadget
            If EventGadget() = #FEN2_FERMER
              CloseWindow(#FENETRE2)
            EndIf
          Case #PB_Event_CloseWindow
            CloseWindow(#FENETRE2)
        EndSelect
    EndSelect
  ForEver
EndIf
J'utilise simplement CanvasGadget() pour obtenir le résultat.
CAGE

Re: Je suis sur quelle fenêtre ????

Publié : lun. 22/avr./2019 13:16
par MLD
Merci Ar-S et cage

Ar_S je pense que c'est la solution :lol:

Cage

Pour les remarques
1° EnableExplicit n'est absolument pas obligatoire. Ceci vient du Pascal ou il fallait tous "déclarer". Si l'on a de la rigueur avec les noms de variables il n'y a pas de problème.

2° le code n'est pas de moi, mais trouver un jour sur le forum.

3° J'ai oublier de dire que la fenêtre 2 ne peu contenir aucun gadget.

encore merci a vous deux