Fenetre Modal

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fenetre Modal

Message par falsam »

Une fenêtre modale ce n'est pas ça Spock. Une fenêtre modale est une fenêtre qui se superpose à une autre et qui contient un bouton ou un événement pour la fermer.

Ce n'est pas ce que fait ton code.

Exemple de fenêtre modale

Code : Tout sélectionner

Procedure ModalWindow()
  OpenWindow(1, 0, 0, 300, 200, "Fenetre modale", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(0))
  DisableWindow(0, #True)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        CloseWindow(1)
        DisableWindow(0, #False)
        Break
    EndSelect
  ForEver
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Main", #PB_Window_SystemMenu)
ButtonGadget(0, 400, 200, 150, 30, "Ouvre la fenetre modale")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0
        ModalWindow()
      EndIf
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Fenetre Modal

Message par Anonyme2 »

Je suis presque d'accord avec Spock sauf que l'on ne devrait pas pouvoir donner le focus à la fenêtre principale, seuls sont pris en compte les événements de la fenêtre 0 dans ce cas, il faut donc un bouton ou un moyen de fermer cette fenêtre avant d'accéder à la fenêtre 1.
Donc d'accord avec Falsam :mrgreen:
Je ne suis pas contrariant

J'utilise la croix de la fenêtre modale

Fenêtre modale Wikipédia
https://fr.wikipedia.org/wiki/Fen%C3%AAtre_modale

Code : Tout sélectionner

OpenWindow(1, 0, 0, 319, 185, "Fenetre principale",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)


OpenWindow(0, 0, 0, 219, 85, "Fenetre modale",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_TOOLWINDOW)
ResizeWindow(0,#PB_Ignore,#PB_Ignore,220,100); : ShowWindow_(WindowID(0),#SW_SHOW)
EnableWindow_(WindowID(1), 0) ; <----- voila ce qui rend modal ! :D
EnableWindow_(WindowID(0), 1) ; <----- voila ce qui rend modal ! :D

Repeat
      Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
                  Select EventWindow()
                        Case 0
                              EnableWindow_(WindowID(1), 1)
                              CloseWindow(0)
                              
                        Case 1
                              Break
                  EndSelect
      EndSelect
      
ForEver
On peut remplacer

Code : Tout sélectionner

EnableWindow_(WindowID(1), 0)
EnableWindow_(WindowID(0), 1)

par

Code : Tout sélectionner

DisableWindow(1, #True)
DisableWindow(0, #False)
comme le code de Falsam
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Fenetre Modal

Message par Mesa »

Que les débutants en programmation, étudient l'excellent code de falsam (plus haut).
WIKIPEDIA: Fenêtre modale

Une fenêtre modale est, dans une interface graphique, une fenêtre qui prend le contrôle total du clavier et de l'écran. Elle est en général associée à une question à laquelle il est impératif que l'utilisateur réponde avant de poursuivre, ou de modifier quoi que ce soit.
Voir ici https://fr.wikipedia.org/wiki/Fen%C3%AAtre_modale pour les types et le rôle des fenêtres modales.

Le messagerequester est une fenêtre modale:

Code : Tout sélectionner

;-----> AJOUT
MessageRequester("Votre attention SVP ! ! !", "MessageRequester est une fenêtre modale")

;code falsam
Procedure ModalWindow()
	OpenWindow(1, 0, 0, 300, 200, "Fenetre modale", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(0))
	DisableWindow(0, #True)
	Repeat
		Select WaitWindowEvent()
			Case #PB_Event_CloseWindow
				CloseWindow(1)
				DisableWindow(0, #False)
				Break
		EndSelect
	ForEver
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Main", #PB_Window_SystemMenu)
ButtonGadget(0, 400, 200, 150, 30, "Ouvre la fenetre modale")

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
		Case #PB_Event_Gadget
			If EventGadget() = 0
				ModalWindow()
			EndIf
	EndSelect
ForEver
M.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Fenetre Modal

Message par Anonyme2 »

Spock a écrit :
Mesa a écrit :Que les débutants en programmation, étudient l'excellent code de falsam (plus haut).
ce qui par deduction veut dire que les autres codes sont de la merde ! :roll:
Ha, quel vilain ce mesa :mrgreen:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Fenetre Modal

Message par Ollivier »

Michael Douglas a écrit :une fenetre modal c'est une fenetre ou on bloque les events !!
Alors c'était dû à ça, ma grosse prise de tête en solitaire il y a 7 ans dans cet ancien sujet pour des fenêtres "modales" (requesters) non compatibles avec les threads... Quand je programmais deux alarmes (ou plus que deux) trop proches en temps l'une de l'autre, les requêtes devenaient ingérables, d'où une reprogrammation perso des requêtes "message" et "input".
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Fenetre Modal

Message par Mesa »

une fenetre modal c'est une fenetre ou on bloque les events !!
C'est faux et archi faux. Comment pourrait-on fermer une fenêtre dans ce cas ! ?

Tu induis en erreur les vrais débutants.
ce qui par deduction veut dire que les autres codes sont de la merde !
Je n'ai jamais dit ça. 8O
Par contre, tes déductions... :wink:

M.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Fenetre Modal

Message par Mesa »

@ollivier: En effet, par définition, la "modalité" et les thread ne vont pas bien ensemble.
Disons, qu'on se lance dans des problèmes inutiles, comme tu l'as dit.
WIKIPEDIA: Fenêtre modale

Une fenêtre modale est, dans une interface graphique, une fenêtre qui prend le contrôle total du clavier et de l'écran. Elle est en général associée à une question à laquelle il est impératif que l'utilisateur réponde avant de poursuivre, ou de modifier quoi que ce soit.



M.

PS: Mes interventions, n'ont qu'un seul but: au hasard d'un thread, pointer du doigt des pièges de programmation afin d'aider le débutant et de l'encourager à poursuivre en programmation. Si vous n’êtes pas débutant, merci de ne prend les prendre en compte.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fenetre Modal

Message par Ar-S »

Spock a écrit : certes , au lieu de
une fenetre modal c'est une fenetre ou on bloque les events !!
j'aurai du ecrire :
une fenetre modal c'est une fenetre ou on bloque les events des autres fenetres !!
Oui je pense que la confusion vient de là.
~~~~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
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: Fenetre Modal

Message par Jacobus »

Salut les gros !
Je vois que même après des siècles d'absence je retrouve les mêmes chamailleries, avec les mêmes potos, c'est cool :)
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Fenetre Modal

Message par Anonyme2 »

Jacobus a écrit :Salut les gros !
Tu m'as démasqué :mrgreen:

Salut Jacobus, vraiment content de lire un peu :D

Ca faisait un moment
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fenetre Modal

Message par Ar-S »

Hey :) un nom sortie du passé. ça fait plaisir !
Bonjour Jacobus :P
~~~~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
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fenetre Modal

Message par Kwai chang caine »

Le saumon......la riviere.....la source ..... :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: Fenetre Modal

Message par Jacobus »

Kwai chang caine a écrit :Le saumon......la riviere.....la source ..... :mrgreen:
Bah, c'est le printemps, j'ai la queue qui frétille...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Fenetre Modal

Message par Kwai chang caine »

:lol: :lol:
Fait quand même attention aux gelées tardives :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre