Hauteur fenetre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Hauteur fenetre

Message par LavaLava »

J'ai recupérer le code suivant pour trouver la taille affichable d'une fenêtre :

Code : Tout sélectionner

  Protected Espace.Point, Taille_Fenetre.rect
    GetWindowRect_(WindowID(0), @Taille_Fenetre) ; taille de la fenêtre totale
    ClientToScreen_(WindowID(Window), Espace) ; taille de la zone utilisable de la fenêtre (sans le titre et les bordures)
    Largeur_Fenetre = Taille_Fenetre\Right - Taille_Fenetre\Left - 5
    Hauteur_Fenetre = Taille_Fenetre\Bottom - Taille_Fenetre\Top - 70
mais ce procedé ne tient pas compte de la présence d'un menu et d'une statusBar !
Comment peut-on avoir réellement la taille intérieure (affichable) d'un fenêtre ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

pour la hauteur d'une statusbar , un post en parle ici ( il y en a peut-être d'autres )
http://purebasic.hmt-forum.com/viewtopic.php?t=242

et pour le menu c'est MenuHeight()
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

La dedans, tu as tout: Dimensions de la zone utile de la fenêtre, menus, StatusBar.

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Btn_Quit
EndEnumeration

Enumeration
  #StatusBar
  #Menu
EndEnumeration


If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
  hWnd = WindowID(#Window_0)
  If CreateGadgetList(WindowID(#Window_0))
    ButtonGadget(#Btn_Quit, 100, 130, 100, 25, "Quitter")
    hMenu = CreateMenu(#Menu,hWnd)
    MenuTitle("Project") 
    hStBar = CreateStatusBar(#StatusBar, hWnd) 
  EndIf
  
  ;-Zone "Utile"de la fenetre
  GetClientRect_(hWnd,@lpRect.RECT)
  
  Haut.w = lpRect\bottom - lpRect\top
  Larg.w = lpRect\right - lpRect\left
  
  ;- Hauteur du menu
  HautMenu = MenuHeight()

  ;- Hauteur de la barre d'état
  SendMessage_(hStBar,#SB_GETRECT,0,@Rect.RECT)
  Haut_Bar = Rect\bottom - Rect\top
  
  ;/
  HauteurFenetre = Haut - (HautMenu+Haut_Bar)
  LargeurFenetre = Larg 
  
  Debug "Largeur = : "+Str(LargeurFenetre)
  Debug "Hauteur = : "+Str(HauteurFenetre)
  ;-
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          ;Case
          ;Case
          Case #Btn_Quit : quit = 1
        EndSelect
        ;Case
        ;Case
      Case #PB_EventCloseWindow : quit = 1
    EndSelect
  Until quit = 1
  End
EndIf
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Merci ...
C'est un peu le bordel pour savoir les cotes des fenêtres !
De plus, j'ai la facheuse tendance à pas chercher ou il faut ....
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Et en plus, je me suis planté dans le code.
GetClientRect_() retire la hauteur du menu dans la valeur retournée.

Voila le vrai exemple. L'autre, tu le jettes. (Pas dans la nature, c'est pas bio-dégradable :lol:)

Code : Tout sélectionner

;/Constantes Window 
Enumeration 
  #Window_0 
EndEnumeration 

;/Constantes Gadget 
Enumeration 
  #Btn_Quit 
  #StatusBar 
  #Menu 
EndEnumeration 

If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0) 
  hWnd = WindowID(#Window_0) 
  If CreateGadgetList(WindowID(#Window_0)) 
    ButtonGadget(#Btn_Quit, 100, 130, 100, 25, "Quitter") 
    hMenu = CreateMenu(#Menu,hWnd) 
    MenuTitle("Project") 
    hStBar = CreateStatusBar(#StatusBar, hWnd) 
  EndIf
 
  ;- Dimensions déclarées dans PureBasic
  Debug "Dimensions de la fenêtre fournies à PB"
  Debug "Hauteur = 200"
  Debug "Largeur = 300"
  Debug ""
  
  ;- Encombrement réel de la fenêtre
  Debug "Encombrement réel de la fenêtre"
  GetWindowRect_(hWnd, Win.RECT)
  HautWin.w = Win\bottom - Win\top : Debug "Hauteur = "+Str(HautWin)
  LargWin.w = Win\right - Win\left : Debug "Largeur = "+Str(LargWin)
  Debug""
  
  ;-Zone "Utile" de la fenetre retournée par GetClientRect_()
  Debug "Zone calculée par GetClientRect_()"
  Debug "La fonction retire la hauteur du menu"
  GetClientRect_(hWnd,@lpRect.RECT) 
  Haut.w = lpRect\bottom - lpRect\top
  Larg.w = lpRect\right - lpRect\left
  Debug "Hauteur = "+Str(Haut)
  Debug "Largeur = "+Str(Larg)
  Debug ""
  
  ;- Hauteur du menu 
  HautMenu = MenuHeight()
  Debug "Hauteur du menu = "+Str(HautMenu)+" (Déjà retiré)"
;   
  ;- Hauteur de la barre d'état 
  SendMessage_(hStBar,#SB_GETRECT,0,@Rect.RECT) 
  Haut_Bar = Rect\bottom - Rect\top
  Debug "Hauteur de la barre d'état = "+Str(Haut_Bar)
  Debug ""
  
  ;- Dimensions exploitables de la fenêtre, hors menu et barre d'état
  HauteurFenetre = Haut - Haut_Bar 
  LargeurFenetre = Larg 
  Debug "Dimensions exploitables, (sans le menu et la StatusBar)"
  Debug "Hauteur = "+Str(HauteurFenetre)
  Debug "Largeur = "+Str(LargeurFenetre)
  ;
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_EventGadget 
        Select EventGadgetID() 
          Case #Btn_Quit : quit = 1 
        EndSelect 
      Case #PB_EventCloseWindow : quit = 1 
    EndSelect 
  Until quit = 1 
  End 
EndIf
Chris :)
Répondre