Page 1 sur 1

Panneau et menu flottant

Publié : mer. 06/juil./2011 9:21
par blendman
Salut

Je me demandais s'il était possible de créer des sortes de menus flottants, comme dans Photoshop (pour les calques, les nuanciers, les brosses, etc..)

Doit-on passer par les MDI ou existe-t'il une autre solution ?
Car les MDi c'est bien, mais ce n'est pas compatible avec linux et mac, il me semble :p.

De plus, savez-vous s'il est possible de détacher un onglet et d'en faire un menu flottant ou l'inverse (lorsque l'on approche un menu flottant d'un panneau d'onglets, le menu flottant "disparait" et un nouvel onglet est ajouté) ?
J'imagine qu'il faut le coder, mais peut être existe-t'il une fonction comme les splitter qui permettent de redimensionner 2 espaces de gadgets :).

Sinon, savez-vous si on peut activer ou désactiver un onglet (tab) d'un panelgadget ?

Merci pour vos informations :)

Re: Panneau et menu flottant

Publié : mer. 06/juil./2011 10:02
par kernadec
bonjour blendman
et si tu décale la zone dessin dans la fenêtre pour mettre des bouton sur le coté
tiens je viens de modifier mon code en exemple dans le post http://www.purebasic.fr/french/viewtopi ... =1&t=12031
tu pourrais y mettre des onglets pour divers sorte de boutons dans cette zone

Cordialement

Re: Panneau et menu flottant

Publié : mer. 06/juil./2011 11:11
par blendman
salut

c'est déjà ce que j'ai fait ;).

Dans la dernière j'ai totalement revu l'interface, et j'ai ajouté des onglets et des splitters, etc.

Ca ressemble à ça pour le moment (je n'ai pas encore mis les codes pour le dessin, car je vais les revoir un peu) :
http://blendman.free.fr/dev/pb/animatoo ... ebasic.jpg

Comme tu vois, j'ai déjà mis en plus l'interface, maintenant, je vais la remplir et activer tout cela :).
Qu'est-ce que ça va vite purebasic, c'est dingue :D.

L'application (windows- il n'y a que l'interface qui est active, aucun outil n'est encore fonctionnel) :
http://blendman.free.fr/dev/pb/animatoon/donwload/

et les sources :
http://blendman.free.fr/dev/pb/animatoon/sources/

Mais j'aimerai faire un système de menu flottant, au cas où j'en aurai besoin :).

EDIT :
bon, j'ai déjà compris comment faire un menu flottant, c'est classe :).
En fait, c'est tout simple.
Donc, je pense que je vais trouver pour la suite.

le code (adapté d'un code de rrpl, sur le forum Anglais)

CODE :

Code : Tout sélectionner

; code de base: rrpl
; modification : blendman (focus, sticky windows, ajout menu...)

Procedure OpenWindow2(number, nom$="")
  num=number
  
  If num = 1; outil
    x = 10
    y = 60
    w = 50
    h = 100
  ElseIf num = 2  
    w = 300
    h = 400
    x = WindowWidth(0)-w-10
    y = 60
  EndIf  
  
  If OpenWindow(number, x,y, w, h, nom$, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_Tool)
   
    If num = 1
      TextGadget(7,5,5,300,20,"Outils")      
    ElseIf num = 2
      CheckBoxGadget(3, 10,  10, 250, 20, "Case à cocher standard")
      CheckBoxGadget(4, 10,  40, 250, 20, "Case à cocher (cochée)") : SetGadgetState(4, #PB_Checkbox_Checked)
      CheckBoxGadget(5, 10,  70, 250, 20, "CheckBox à trois états", #PB_CheckBox_ThreeState) : SetGadgetState(5, #PB_Checkbox_Inbetween)
      ButtonGadget(2,115,250,50,25,"Annuler")
      ButtonGadget(6,170,250,50,25,"Ok")
      ;     CreateStatusBar(1,WindowID(1))
      ;     AddStatusBarField(#PB_Ignore)
      ;     StatusBarText(1, 0, "", #PB_StatusBar_BorderLess)
    EndIf

    StickyWindow(number,1) 
  EndIf
EndProcedure


Global quit = 0, newDialog.w

If OpenWindow(0, 0,0, 640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered|#PB_Window_Maximize) 
  SetWindowColor(0,RGB(125,125,125))
  
  If CreateMenu(0,WindowID(0))
    MenuTitle("Fichier")
    MenuTitle("Edition")
    MenuTitle("Fenêtres")
    MenuItem(0,"Outils")
    MenuItem(1,"Dialogue 2")
  EndIf
  
  If CreateStatusBar(0,WindowID(0))
  EndIf  
EndIf


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0 ; outils
          OpenWindow2(1)
        Case 1 ; dialogue2
          OpenWindow2(2)
      EndSelect
      
      
    Case #PB_Event_Gadget      
      Select EventGadget()
        Case 1
;           newDialog + 1
;           Debug newDialog
;           OpenWindow2(newDialog)
        Case 2
          CloseWindow(1)
      EndSelect
    Case #PB_Event_CloseWindow
      If GetActiveWindow() = 0
        quit = 1
      Else 
        CloseWindow(GetActiveWindow())
      EndIf
      
  EndSelect
Until quit = 1
Bon, ce ne sont pas exactement des panneaux flottants comme je cherche, mais c'est déjà un bon début :).