[5.20b] MDIgadget, containergadget et splitter

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[5.20b] MDIgadget, containergadget et splitter

Message par blendman »

salut

Je viens de remarquer que si on utilise un MDIgadget (windows only) sur un containergadget et un splittergadget, lorsque l'on maximize la fenêtre fille, les boutons n'apparaissent plus en haut à droite.

Savez-vous comment on peut récupérer ces boutons ?
;{ constante
Enumeration ; window
#FenetrePrincipale
#FenetreFille
EndEnumeration
#toolbar= 0

Enumeration ; Menu
; files
#menu_New
#menu_Open
EndEnumeration

;}

If OpenWindow(#FenetrePrincipale, 0, 0, 400, 300, "MDIGadget & split", #PB_Window_SystemMenu|
#PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget|#PB_Window_Maximize)

;{ menu
If CreateMenu(#FenetrePrincipale, WindowID(#FenetrePrincipale))
MenuTitle("Files")
MenuItem(#menu_New, "New")
MenuItem(#menu_Open, "Open")
EndIf
;}
;{ toolbar
If CreateToolBar(#toolbar,WindowID(#FenetrePrincipale))
ToolBarStandardButton(0,#PB_ToolBarIcon_New)
ToolBarStandardButton(1,#PB_ToolBarIcon_Open)
ToolBarStandardButton(2,#PB_ToolBarIcon_Save)
ToolBarSeparator()
ToolBarStandardButton(3,#PB_ToolBarIcon_Cut)
ToolBarStandardButton(3,#PB_ToolBarIcon_Copy)
ToolBarStandardButton(3,#PB_ToolBarIcon_Paste)
y = ToolBarHeight(#toolbar)
EndIf
;}

h = WindowHeight(0)-MenuHeight() -y -5
w = WindowWidth(#FenetrePrincipale)

;{ gadget
panel = TreeGadget(#PB_Any,0,0,150,h)
AddGadgetItem(panel,0,"Truc")
scroll = ContainerGadget(#PB_Any,155,0,w-155, WindowHeight(0)-MenuHeight())
CloseGadgetList()

split = SplitterGadget(#PB_Any,0,y,w,h,panel, scroll,#PB_Splitter_Vertical )
SetGadgetState(split, 160)
;}

;{ on crée la fenêtre fille
OpenGadgetList(scroll)
MDIGadget(0, 0, 0, 0,0, 1, 2, #PB_MDI_AutoSize )
AddGadgetItem(0, #FenetreFille, "Fenêtre Fille")
TextGadget(#PB_Any,10,10,40,20,"Name : ")
ResizeWindow(#FenetreFille,#PB_Ignore, #PB_Ignore,530,315)
;}

UseGadgetList(WindowID(#FenetrePrincipale)) ; retourne à la liste de gadgets de la fenêtre principale
CloseGadgetList()

Repeat
event = WaitWindowEvent()
EventWindow = EventWindow()

Select event

Case #PB_Event_CloseWindow

Select EventWindow
Case #FenetrePrincipale
quit = 1

Default
CloseWindow(EventWindow)
EndSelect

Case #PB_Event_SizeWindow

Select EventWindow

Case #FenetreFille

EndSelect

EndSelect

Until quit = 1
EndIf
Une autre remarque :
- si je remplace le containtergadget par un scrollareagadget, lorsque je maximise, j'ai une IMA.
est-ce un bug ?


Merci bien :)
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: [5.20b] MDIgadget, containergadget et splitter

Message par Mesa »

D'après la doc sur le mdigadget, on ne peut pas utiliser un container ni un splitter ni un panel avec un mdi. Le mdi doit être dans la fenetre principale.
"Remarques

A cause de la connexion avec les menus, il ne peut y avoir qu'un seul gadget MDI par fenêtre, cependant vous pouvez utiliser plusieurs fenêtres contenant un gadget MDI chacune. Ce gadget ne peut être créé que dans une fenêtre principale donc pas dans un ContainerGadget(), SplitterGadget() ou PanelGadget()). "
C'est dommage.

Mesa.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [5.20b] MDIgadget, containergadget et splitter

Message par blendman »

Mesa a écrit :D'après la doc sur le mdigadget, on ne peut pas utiliser un container ni un splitter ni un panel avec un mdi. Le mdi doit être dans la fenetre principale.
"Remarques

A cause de la connexion avec les menus, il ne peut y avoir qu'un seul gadget MDI par fenêtre, cependant vous pouvez utiliser plusieurs fenêtres contenant un gadget MDI chacune. Ce gadget ne peut être créé que dans une fenêtre principale donc pas dans un ContainerGadget(), SplitterGadget() ou PanelGadget()). "
C'est dommage.
ah pourtant, ça marche dans mon exemple :).
Du coup, je ne vois pas à quoi ça sert si on ne peut pas créer d'autres gadgets dans la fenêtre...
Car pour un soft de dessin, de 3D, un éditeur de level, etc.. On doit bien avoir des gadgets. Il faudrait alors uniquement utilisé des gadgets qui seraient eux-mêmes des sous-fenêtres ? C'est vraiment dommage, c'est clair.

Je vais réfléchir pour voir si on ne peut pas faire un système à la main dans le cas de mon exemple ^^.
On doit pouvoir ajouter un container en haut, à droite, et celui-ci peut contenir les boutons qui réagiraient avec la fenêtre-fille.

[edit] bon, ben, je me suis fait un petit code (à revoir) qui permet de gérer des MDI avec splitters et containergadget. C'est à revoir comme code car il reste un "bug" si on ferme une fenêtre et qu'on en rouvre une, mais l'idée fonctionne bien.
Voir dans trucs et astuces : http://www.purebasic.fr/french/viewtopi ... =6&t=13905
[/edit]
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [5.20b] MDIgadget, containergadget et splitter

Message par falsam »

Juste une parenthèse. La fenêtre fille tremblote (flickers) quand on cherche à la redimentionner. Ce qui n'était pas le cas avec la version 4.51.
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%
Répondre