[Résolu] Comment créer 2 fenêtres inséparables
[Résolu] Comment créer 2 fenêtres inséparables
Bonjour à tous,
Toujours dans mon carnet de surveillance, je souhaiterais que quand je le souhaite avoir certaines informations telles que le resucrage ou les recommandations, une fenêtre fille se colle à sa mère, même si je déplace la fenêtre mère avant ou après l'ouverture de la fenêtre fille, l'inverse n'est pas obligatoire et je pense inutile. Je pense qu'il faut un rappel quand la fenêtre mère est déplacée, je ne sais pas si c'est avec ResizeWindow() ou une autre commande.
Alors si vous pouviez m'aider, ce serait un grand bonheur pour moi et je vous en remercierai jamais assez.
Je vous remercie par avance parce je sais que votre aide me sera d'une aide infinie.
Toujours dans mon carnet de surveillance, je souhaiterais que quand je le souhaite avoir certaines informations telles que le resucrage ou les recommandations, une fenêtre fille se colle à sa mère, même si je déplace la fenêtre mère avant ou après l'ouverture de la fenêtre fille, l'inverse n'est pas obligatoire et je pense inutile. Je pense qu'il faut un rappel quand la fenêtre mère est déplacée, je ne sais pas si c'est avec ResizeWindow() ou une autre commande.
Alors si vous pouviez m'aider, ce serait un grand bonheur pour moi et je vous en remercierai jamais assez.
Je vous remercie par avance parce je sais que votre aide me sera d'une aide infinie.
Dernière modification par Micoute le ven. 29/nov./2019 16:36, modifié 2 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment créer 2 fenêtres inséparables
salut micoute
voici un exemple de Rashad sur le MDIGadget, maintenant c'est auto géré je comprend pas ton souci
cordialement
voici un exemple de Rashad sur le MDIGadget, maintenant c'est auto géré je comprend pas ton souci
cordialement
Code : Tout sélectionner
#Main = 0
#MDIChild = 1
#MDIChild2 = 2
#MDIChild3 = 3
If OpenWindow(#Main, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget)
If CreateMenu(#Main, WindowID(#Main))
MenuTitle("Menu index 0")
MenuItem(0, "self created item")
MenuItem(1, "Select Window #2")
MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
AddGadgetItem(0, #MDIChild, "child window")
; add gadgets here...
AddGadgetItem(0, #MDIChild2, "child window #2")
AddGadgetItem(0, #MDIChild3, "child window #3")
UseGadgetList(WindowID(#Main)) ; go back to the main window gadgetlist
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_ActivateWindow
act = GetGadgetState(0)
Debug act
Case #PB_Event_Menu
Select EventMenu()
Case 1
SetGadgetState(0,2)
act = 2
Debug act
EndSelect
EndSelect
Until Quit = 1
EndIf
Re: Comment créer 2 fenêtres inséparables
Merci Kernadec, mais le titre de mon poste est peut-être mal choisi, car en fait je souhaiterais avec 2 fenêtres collées l'une à l'autre et interdépendantes ou la fille dépendante de la mére.
Cet exemple me servira plus tard, c'est pourquoi je l'ai archivé.
Cet exemple me servira plus tard, c'est pourquoi je l'ai archivé.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment créer 2 fenêtres inséparables
comme ca peut être

Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; PureBasic - Window example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
;
; Open a window, and do some stuff with it...
;
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
OpenWindow(1, WindowX(0)+350, WindowY(0), 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
MessageRequester("Information", "Click to move the Window", 0)
ResizeWindow(0, 200, 200, #PB_Ignore, #PB_Ignore) ; Move the window to the coordinate 200,200
ResizeWindow(1, WindowX(0)+350, 200, #PB_Ignore, #PB_Ignore) ; Move the window to the coordinate 200,200
MessageRequester("Information", "Click to resize the Window", 0)
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
ResizeWindow(1, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
MessageRequester("Information", "Click to resize the Window", 0)
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
ResizeWindow(1, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
;
; This is the 'event loop'. All the user actions are processed here.
; It's very easy to understand: when an action occurs, the Event
; isn't 0 and we just have to see what have happened...
;
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Re: Comment créer 2 fenêtres inséparables
Bonjour Micoute,Toujours dans mon carnet de surveillance, je souhaiterais que quand je le souhaite avoir certaines informations telles que le resucrage ou les recommandations, une fenêtre fille se colle à sa mère, même si je déplace la fenêtre mère avant ou après l'ouverture de la fenêtre fille, l'inverse n'est pas obligatoire et je pense inutile. Je pense qu'il faut un rappel quand la fenêtre mère est déplacée, je ne sais pas si c'est avec ResizeWindow() ou une autre commande.
C'est effectivement ResizeWindow qui permet de déplacer les fenêtres et il suffit ensuite d'utiliser l'évènement #PB_Event_MoveWindow et de déplacer la fenêtre fille par rapport aux coordonnées de la fenêtre mère.
Code : Tout sélectionner
EnableExplicit
Enumeration
#Win_A
#Win_B
EndEnumeration
OpenWindow(#Win_A, 100, 100, 200, 300, "Fenêtre Principale")
OpenWindow(#Win_B, 310, 100, 200, 300, "Fenêtre Secondaire")
Procedure Move_Win_B()
ResizeWindow(#Win_B, WindowX(#Win_A) + 210, WindowY(#Win_A), #PB_Ignore, #PB_Ignore)
EndProcedure
BindEvent(#PB_Event_MoveWindow, @Move_Win_B(), #Win_A)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
1. En utilisant BindEvent() on voit les fenêtres au complet pendant le déplacement alors que sinon on a juste le cadre.
2. Il te reste à gérer le déplacement de l'autre côté si la fenêtre sort de l'écran
3. Si ta fenêtre principale est redimensionnable, il faut alors utiliser WindowWidth() de la fenêtre A pour positionner la fenêtre B toujours collée.

[Résolu] Comment créer 2 fenêtres inséparables
Merci Marc56,
je me suis inspiré de ton exemple, mais à la place d'utiliser les coordonnées de ma fenêtre, j'ai utilisé un CanVasGadget()
Merci encore
je me suis inspiré de ton exemple, mais à la place d'utiliser les coordonnées de ma fenêtre, j'ai utilisé un CanVasGadget()
Code : Tout sélectionner
;Si la fenêtre de saisies est déplacée, faire en sorte que les autres fenêtres ouvertes suivent le mouvement
BindGadgetEvent(#Cvs_Saisie, @Deplacer_les_fenetres())
Code : Tout sélectionner
Procedure Deplacer_les_fenetres()
If IsWindow(#Fenetre_Complications)
ResizeWindow(#Fenetre_Complications, WindowX(#Fenetre_Saisies) + WindowWidth(#Fenetre_Saisies), WindowY(#Fenetre_Saisies) + 175, #PB_Ignore, #PB_Ignore)
EndIf
If IsWindow(#Fenetre_Recommandations)
ResizeWindow(#Fenetre_Recommandations, WindowX(#Fenetre_Saisies) + WindowWidth(#Fenetre_Saisies), WindowY(#Fenetre_Saisies) + 105, #PB_Ignore, #PB_Ignore)
EndIf
If IsWindow(#Fenetre_Resucrage)
ResizeWindow(#Fenetre_Resucrage, WindowX(#Fenetre_Saisies) + WindowWidth(#Fenetre_Saisies), WindowY(#Fenetre_Saisies) + 235, #PB_Ignore, #PB_Ignore)
EndIf
If IsWindow(#Fenetre_Graphique)
ResizeWindow(#Fenetre_Graphique, WindowX(#Fenetre_Saisies) - 600, WindowY(#Fenetre_Saisies) + 50, #PB_Ignore, #PB_Ignore)
EndIf
If IsWindow(#Fenetre_couleurs)
ResizeWindow(#Fenetre_couleurs, WindowX(#Fenetre_Saisies), WindowY(#Fenetre_Saisies) + 50, #PB_Ignore, #PB_Ignore)
EndIf
If IsWindow(#fenetre_Choisir_couleur)
ResizeWindow(#fenetre_Choisir_couleur, WindowX(#Fenetre_Saisies) + 315, WindowY(#Fenetre_Saisies) + 450, #PB_Ignore, #PB_Ignore)
EndIf
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment créer 2 fenêtres inséparables
@Micoute
Bonjour
Il y a aussi un truc dans ce genre
Bonjour
Il y a aussi un truc dans ce genre
Code : Tout sélectionner
Enumeration
#Ma_fen = 1
#BT1 = 2
#Ma_fen2 = 3
EndEnumeration
Global DPF ;drapeau fenetre
Procedure fen2()
X2 = WindowX(#Ma_fen)+ WindowWidth(#Ma_fen) + 5
Y2 = WindowY(#Ma_fen)
OpenWindow(#Ma_fen2,X2,Y2,400,140,"Ma Fenêtre secondaire",#PB_Window_MinimizeGadget|#NUL|#NUL|#NUL)
SetWindowColor(#Ma_fen2,$0CA5)
SetActiveWindow(#Ma_fen)
EndProcedure
OpenWindow(#Ma_fen,720,320,320,265,"Ma Fenêtre P",#PB_Window_MinimizeGadget|#NUL|#NUL|#NUL)
SetWindowColor(#Ma_fen,$6842AF)
StickyWindow(#Ma_fen,1)
;Vos gadgets ici
ButtonGadget(#BT1, 150, 200,150, 30, "Fen 2")
;
Repeat
If DPF = 1
X2 = WindowX(#Ma_fen)+ WindowWidth(#Ma_fen) + 5
Y2 = WindowY(#Ma_fen)
ResizeWindow(#Ma_fen2, X2, Y2,#PB_Ignore , #PB_Ignore )
EndIf
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #BT1
DPF = 1
fen2()
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
End