PureBasic

Forums PureBasic
Nous sommes le Lun 17/Juin/2019 22:00

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: 2 fenêtres pour 1 evenement
MessagePosté: Mer 03/Avr/2019 23:11 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 85
Bonsoirs à tous,

Je fais face à un problème dont je ne m'y attendais pas

Je ne sais pas si 2 fenêtres et leurs gadgets respectifs peuvent cohabiter dans la même boucle

Code:
Openwindow 1 et ses gadgets

Openwindow 2 et ses gadgets

Repeat
   Event = WaitWindowEvent()
   WindowID = EventWindow()
   GadgetID = EventGadget()
   EventType = EventType()

....

until.....


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: 2 fenêtres pour 1 evenement
MessagePosté: Jeu 04/Avr/2019 7:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2134
Localisation: 50200 Coutances
Bien entendu, mais il faut différencier les gadgets et en particulier les fenêtres, à moins qu'on veuille que tout s'arrête en même temps, s'il s'agît de deux fenêtres voisines, car s'il s'agît de deux fenêtres se chevauchant, la méthode n'est pas la même.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: 2 fenêtres pour 1 evenement
MessagePosté: Jeu 04/Avr/2019 7:36 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1564
Citation:
Je ne sais pas si 2 fenêtres et leurs gadgets respectifs peuvent cohabiter dans la même boucle

  • Il ne doit de toute façon y avoir qu'une seule boucle d’événement par programme.
  • Chaque événement retourné par WaitWindowEvent() ou WindowEvent() contient deux informations:
    • L’événement
    • La fenêtre qui a retourné l’événement
  • On peut séparer soit au niveau fenêtre, soit au niveau Gadget()
  • Sans séparation, ce sont tous les événements identiques qui sont groupés
Code:
; Cas 1 n'importe quelle case de fermeture ferme toutes les fenêtres

EnableExplicit

Enumeration
    #Win_0   
    #Win_1   
    #Win_2   
EndEnumeration

OpenWindow(#Win_0, 100, 100, 100, 100, "")
OpenWindow(#Win_1, 200, 200, 100, 100, "")
OpenWindow(#Win_2, 300, 300, 100, 100, "")

Repeat
    Select WaitWindowEvent()

        Case #PB_Event_CloseWindow
            Break

    EndSelect
ForEver

Code:
; Cas 2: Seule la fenête 0 ferme le programme, les autres ferment la fenêtre appelante

EnableExplicit

Enumeration
    #Win_0   
    #Win_1   
    #Win_2   
EndEnumeration

OpenWindow(#Win_0, 100, 100, 100, 100, "")
OpenWindow(#Win_1, 200, 200, 100, 100, "")
OpenWindow(#Win_2, 300, 300, 100, 100, "")

Repeat
    Select WaitWindowEvent()

        Case #PB_Event_CloseWindow
           
            Select EventWindow()
                Case #Win_0 : Break
                Case #Win_1 : CloseWindow(#Win_1)
                Case #Win_2 : CloseWindow(#Win_2)
            EndSelect
           
    EndSelect
ForEver

Pour éviter les erreurs, une technique simple est de préfixer tous les gadgets en fonction de leur fenêtre. Ainsi pas de doublon possible. Ex #Win_0_Btn_Quit #Win_0_Btn_Save ...

:wink:

_________________
HP de 2012 - Intel i3-3220 @3.30 GHz, 2 coeurs, 4 threads - RAM 16 Go - Nvidia GT 620 1920x1080 DPI 100%
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: 2 fenêtres pour 1 evenement
MessagePosté: Jeu 04/Avr/2019 10:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1590
Localisation: Belgique
Bonjour Ekim,

Personnellement je n'utilise plus la boucle pour la gestion des événements mais les bind

Voici une exemple concret

Teste les boutons ainsi que les croix pour fermer les fenêtre :wink:

Code:
Enumeration ; id window
  #FORM_1
  #FORM_2
EndEnumeration
Enumeration ; id gadget
  #BT_1
  #BT_2
EndEnumeration
; GESTION DES EVENT
Procedure evClose()
  MessageRequester("Info","vous aller fermer la fenêtre "+GetWindowTitle(EventWindow()))
  CloseWindow(EventWindow())
  ; je teste si les deux fenêtre sont fermée et quitte alors
  ; le program
  If Not IsWindow(#FORM_1) And Not IsWindow(#FORM_2)
    End
  EndIf
EndProcedure

Procedure evBt_1()
  MessageRequester("Info","vous avez cliquer sur le bouton 1")
EndProcedure

Procedure evBt_2()
  MessageRequester("Info","vous avez cliquer sur le bouton 2")
EndProcedure

Procedure openForm_1()
  OpenWindow(#FORM_1,0,0,400,400,"FORM 1 ",#PB_Window_SystemMenu)
  ButtonGadget(#BT_1,150,175,100,50,"BUTTON_1")
  ; MISE EN PLACE DU CALLBACK POUR LA FENPETRE
  BindEvent(#PB_Event_CloseWindow,@evClose(),#FORM_1)
  ; CALLBACK BUTTON
  BindGadgetEvent(#BT_1,@evBt_1())
EndProcedure

Procedure openForm_2()
  OpenWindow(#FORM_2,400,0,400,400,"FORM 2 ",#PB_Window_SystemMenu)
  ButtonGadget(#BT_2,150,175,100,50,"BUTTON_2")
  ; MISE EN PLACE DU CALLBACK POUR LA FENPETRE
  BindEvent(#PB_Event_CloseWindow,@evClose(),#FORM_2)
  ; CALLBACK BUTTON
  BindGadgetEvent(#BT_2,@evBt_2())
EndProcedure

; ouverture des fenêtres
openForm_1()
openForm_2()
; MAIN LOOP
Repeat : WaitWindowEvent() : ForEver

_________________
Linux Mint / Windows 10 64 bits PB: 5.61 ; 5.62 beta


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: 2 fenêtres pour 1 evenement
MessagePosté: Jeu 04/Avr/2019 23:02 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 85
@Micoute @Marc56 donc se qu'il faut retenir c'est une boucle pour toutes les fenêtres mais il faut les différencier par leur variable et l'exemple "EventWindow()" est cool merci :wink:

Salut @microdevweb ta façon me fait beaucoup penser au vbscript))) je dis ça car je pratiquais beaucoup)) mais effectivement, la méthode simplifie les choses sur plusieurs façons, merci)

merci à vous les Basiciens :D


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye