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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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



Dernière modification par MLD le lun. 22/avr./2019 13:18, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

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

Message 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
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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
Répondre