Superposition de Gadgets

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Superposition de Gadgets

Message par falsam »

Qu'est ce que j'aimerais que les gadgets s'empilent correctement ......

Voila un code simplifié qui permet d'obtenir un sidebar coulissant en cliquant sur l'icone ᐊ ou ᐅ situé en haut à droite du sidebar.

Comme vous allez le voir, il ne sera pas possible de fermer ce sidebar à cause du ListIconGadget().

Code : Tout sélectionner

EnableExplicit

Enumeration Police
  #fontGlobal
  #fontMenuTitle
  #fontUnicode  
EndEnumeration

Enumeration Window
  #mf
EndEnumeration

Enumeration Timer
  #mfMenuTimer
EndEnumeration

Enumeration Gadget
  #mfSidebar
  #mfTitle
  #mfMenu
  #mfClose
  #mfList
EndEnumeration

;Flag SideBar 
;  1: Close
; -1: Open
Global MenuState.i = -1  
Global SideBarColor = RGB(188, 143, 143)

;Summary
Declare Start()
Declare MenuSelect()
Declare MenuOpenClose()
Declare Resize()
Declare Exit()

Start()

Procedure Start()
  Protected n
  
  LoadFont(#FontGlobal, "Arial", 10)
  LoadFont(#fontMenuTitle, "Arial", 13)
  LoadFont(#fontUnicode, "Arial", 22)
  SetGadgetFont(#PB_Default, FontID(#FontGlobal))
  
  OpenWindow(#mf, 0, 0, 800, 600, "Sidebar", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  
  ;Content
  ListIconGadget(#mfList, 60, 10, 730, 580, "Clients", 200, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(#mfList, 1, "Compte", 300)
  
  ;Ajout d'items test
  For n = 0 To 10
    AddGadgetItem(#mfList, -1, "Client " + n + Chr(10) + Str(411000 + n))
  Next
  SetGadgetState(#mfList, 0)
    
  ;SideBar
  ContainerGadget(#mfSidebar, 0, 0, 200, 600) 
  SetGadgetColor(#mfSidebar, #PB_Gadget_BackColor, SideBarColor) 
    ;Menu
    HyperLinkGadget(#mfMenu, 170, 10, 25, 26, Chr($140A), RGB(0, 0, 0))
    SetGadgetColor(#mfMenu, #PB_Gadget_FrontColor, RGB(255, 255, 255))  
    SetGadgetColor(#mfMenu, #PB_Gadget_BackColor, SideBarColor)  
    SetGadgetFont(#mfMenu, FontID(#fontUnicode))
          
    ;Close 
    HyperLinkGadget(#mfClose, 10, 550, 50, 22, "X Close", RGB(0, 0, 0))  
    SetGadgetColor(#mfClose, #PB_Gadget_FrontColor, RGB(105, 105, 105))  
    SetGadgetColor(#mfClose, #PB_Gadget_BackColor, SideBarColor)  
  CloseGadgetList()
    
  ;Timer
  AddWindowTimer(#mf, #mfMenuTimer, 2)
  
  ;SideBar close and resize
  MenuSelect()
  Resize()
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  BindEvent(#PB_Event_SizeWindow, @Resize())  
  BindEvent(#PB_Event_Timer, @MenuOpenClose())
  
  BindGadgetEvent(#mfMenu, @MenuSelect())
  BindGadgetEvent(#mfclose, @Exit()) 
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure MenuSelect()
  MenuState * -1 
  If MenuState = -1
    SetGadgetText(#mfMenu, Chr($140A)) ;ᐊ
    GadgetToolTip(#mfMenu, "Close Sidebar")
  Else
    SetGadgetText(#mfMenu, Chr($1405)) ;ᐅ
    GadgetToolTip(#mfMenu, "Open Sidebar")
  EndIf
  SetActiveGadget(#mfMenu)
EndProcedure

Procedure MenuOpenClose()
  Static Left.i 
  
  If Left > -150 And MenuState = 1
    Left - 5
    ResizeGadget(#mfSidebar, left, #PB_Ignore, #PB_Ignore, #PB_Ignore)  
  EndIf
  
  If Left <> 0 And MenuState = -1
    Left + 5
    ResizeGadget(#mfSidebar, left, #PB_Ignore, #PB_Ignore, #PB_Ignore)  
  EndIf   
EndProcedure

Procedure Resize()
  Protected WindowHeight = WindowHeight(#mf)
  
  ResizeGadget(#mfSidebar, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight)  
  ResizeGadget(#mfClose, #PB_Ignore, WindowHeight - 40, #PB_Ignore, #PB_Ignore) 
EndProcedure

Procedure Exit()  
  End
EndProcedure
j'ai la solution de décalé aussi le ListisconGadget() mais ce n'était pas l'objectif.
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%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Superposition de Gadgets

Message par falsam »

Par contre sous linux aucun souci ! Alors là j'enrage ....
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%
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Superposition de Gadgets

Message par GallyHC »

Bonjour,

Une solution pour "Windows" uniquement, voila le code :

Code : Tout sélectionner

EnableExplicit

Enumeration Police
  #fontGlobal
  #fontMenuTitle
  #fontUnicode  
EndEnumeration

Enumeration Window
  #mf
EndEnumeration

Enumeration Timer
  #mfMenuTimer
EndEnumeration

Enumeration Gadget
  #mfSidebar
  #mfTitle
  #mfMenu
  #mfClose
  #mfList
EndEnumeration

;Flag SideBar 
;  1: Close
; -1: Open
Global MenuState.i = -1  
Global SideBarColor = RGB(188, 143, 143)

;Summary
Declare Start()
Declare MenuSelect()
Declare MenuOpenClose()
Declare Resize()
Declare Exit()

;
; -------------------------------------
;
Procedure ForceGadgetZOrder(gadget.i, zorder.l = 0)
;
;
;
  If IsGadget(gadget)
    SetWindowLong_(GadgetID(gadget), #GWL_STYLE, GetWindowLong_(GadgetID(gadget), #GWL_STYLE) | #WS_CLIPSIBLINGS)
    If zorder = 1
      SetWindowPos_ (GadgetID (gadget), #HWND_BOTTOM, 0,0,0,0, #SWP_NOSIZE | #SWP_NOMOVE)
    Else
      SetWindowPos_ (GadgetID(gadget), #HWND_TOP, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE)
    EndIf
  EndIf

EndProcedure
;
; -------------------------------------
;

Start()

Procedure Start()
  Protected n
  
  LoadFont(#FontGlobal, "Arial", 10)
  LoadFont(#fontMenuTitle, "Arial", 13)
  LoadFont(#fontUnicode, "Arial", 22)
  SetGadgetFont(#PB_Default, FontID(#FontGlobal))
  
  OpenWindow(#mf, 0, 0, 800, 600, "Sidebar", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  
  ;Content
  ListIconGadget(#mfList, 60, 10, 730, 580, "Clients", 200, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
  AddGadgetColumn(#mfList, 1, "Compte", 300)
  
  ;Ajout d'items test
  For n = 0 To 10
    AddGadgetItem(#mfList, -1, "Client " + n + Chr(10) + Str(411000 + n))
  Next
  SetGadgetState(#mfList, 0)
    
  ;SideBar
  ContainerGadget(#mfSidebar, 0, 0, 200, 600) 
  SetGadgetColor(#mfSidebar, #PB_Gadget_BackColor, SideBarColor) 
    ;Menu
    HyperLinkGadget(#mfMenu, 170, 10, 25, 26, Chr($140A), RGB(0, 0, 0))
    SetGadgetColor(#mfMenu, #PB_Gadget_FrontColor, RGB(255, 255, 255))  
    SetGadgetColor(#mfMenu, #PB_Gadget_BackColor, SideBarColor)  
    SetGadgetFont(#mfMenu, FontID(#fontUnicode))
          
    ;Close 
    HyperLinkGadget(#mfClose, 10, 550, 50, 22, "X Close", RGB(0, 0, 0))  
    SetGadgetColor(#mfClose, #PB_Gadget_FrontColor, RGB(105, 105, 105))  
    SetGadgetColor(#mfClose, #PB_Gadget_BackColor, SideBarColor)  
  CloseGadgetList()
  
  ;
  ; CHANGEMENT DES ZORDER.
  ;
  ForceGadgetZOrder(#mfList, 1)
  ForceGadgetZOrder(#mfSidebar, 0)
  ;
  ; CHANGEMENT DES ZORDER.
  ;
  
  ;Timer
  AddWindowTimer(#mf, #mfMenuTimer, 2)
  
  ;SideBar close and resize
  MenuSelect()
  Resize()
  
  ;Triggers
  BindEvent(#PB_Event_CloseWindow, @Exit())
  BindEvent(#PB_Event_SizeWindow, @Resize())  
  BindEvent(#PB_Event_Timer, @MenuOpenClose())
  
  BindGadgetEvent(#mfMenu, @MenuSelect())
  BindGadgetEvent(#mfclose, @Exit()) 
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure MenuSelect()
  MenuState * -1 
  If MenuState = -1
    SetGadgetText(#mfMenu, Chr($140A)) ;ᐊ
    GadgetToolTip(#mfMenu, "Close Sidebar")
  Else
    SetGadgetText(#mfMenu, Chr($1405)) ;ᐅ
    GadgetToolTip(#mfMenu, "Open Sidebar")
  EndIf
  SetActiveGadget(#mfMenu)
EndProcedure

Procedure MenuOpenClose()
  Static Left.i 
  
  If Left > -150 And MenuState = 1
    Left - 5
    ResizeGadget(#mfSidebar, left, #PB_Ignore, #PB_Ignore, #PB_Ignore)  
  EndIf
  
  If Left <> 0 And MenuState = -1
    Left + 5
    ResizeGadget(#mfSidebar, left, #PB_Ignore, #PB_Ignore, #PB_Ignore)  
  EndIf   
EndProcedure

Procedure Resize()
  Protected WindowHeight = WindowHeight(#mf)
  
  ResizeGadget(#mfSidebar, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight)  
  ResizeGadget(#mfClose, #PB_Ignore, WindowHeight - 40, #PB_Ignore, #PB_Ignore) 
EndProcedure

Procedure Exit()  
  End
EndProcedure
Cordialement,
GallyHC
Dernière modification par GallyHC le jeu. 09/févr./2017 17:55, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Superposition de Gadgets

Message par falsam »

Merci beaucoup Gally. C'est génial.
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%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Superposition de Gadgets

Message par Shadow »

Oui ce qui manque à PB c'est la superposition des contrôle comme par exemple dans VB !
Et oui, PB n'est pas parfais mais de plus en plus puissant :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Re: Superposition de Gadgets

Message par kwandjeen »

Pour un logiciel je faisais apparaître des gadgets dans une fenêtre sans bordure.
C'est de la bidouille mais ça fonctionne bien.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Superposition de Gadgets

Message par Kwai chang caine »

Joli effet 8O
Bravo à vous deux 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

Re: Superposition de Gadgets

Message par Mindphazer »

Salut Falsam,
si ça peut te rassurer (ou pas :mrgreen: ), il y a le même problème sous OS X...
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Superposition de Gadgets

Message par falsam »

il y a le même problème sous OS X...
Etonnant quand on sait que sous Linux ça fonctionne correctement.
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