Problème de dimensionnement des gadgets.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
yann64
Messages : 33
Inscription : mer. 26/mai/2004 20:59
Contact :

Problème de dimensionnement des gadgets.

Message par yann64 »

Je me suis mis à coder en PB depuis peu de temps, et je n'arrive pas à faire certaines choses toutes bêtes.
Je veux créer une fenêtre avec simplement un menu, une statusbar, une toolbar et un SplitterGadget en utilisant seulement les fonctions natives PB (pas d'API windows car je code sous Windows XP ET Linux Mandrake 10.0). Il se trouve qu'en utilisant le code suivant, je me retrouve avec mon SplitterGadget qui recouvre la barre de menu et la statusbar, et je n'ai pas trouvé une fonction me permettant d'obtenir la hauteur de ces dernier pour redimensionner mon SplitterGadget en fonction.
J'ai cherché sur le forum et apparament tout le monde utilise l'API windows pour obtenir ces valeur.
Quelqu'un peut-il me dire si elles existent, et si oui quelle sont-elles?

Pour info, voici mon code (rien de bien difficile pour l'instant, j'en suis juste au début...):

Code : Tout sélectionner

Global AppVersion.s,AppName.s

Global AppODBCsource.s,AppODBCuser.s,AppODBCpassword.s

Global MainWindowX.l,MainWindowY.l,MainWindowHeight.l,MainWindowWidth.l

AppVersion = "0.0.1"
AppName = "CG"

Enumeration
  #CG             ;Base de donnée
  
  #MainWindow     ;Fenêtre principale
  
  #MainToolbar
  #MainToolbar_Nouveau
  
  #MainMenu
  #MainMenu_Nouveau
  #MainMenu_Quitter
  
  #MainStatusBar
  
  #SplitterGadget1
  
  #ListIconGadgetHaut 
  #ListIconGadgetBas
  
EndEnumeration

Procedure GetParameters()
  OpenPreferences("conf.ini")
  
  ;Paramètre généraux du programme
  AppODBCsource = ReadPreferenceString("AppODBCsource", "CG")
  AppODBCuser = ReadPreferenceString("AppODBCuser", "admin")
  AppODBCpassword = ReadPreferenceString("AppODBCpassword", "")
  
  ;Paramètres de la fenêtre
  MainWindowY = ReadPreferenceLong("MainWindowY", 0)
  MainWindowX = ReadPreferenceLong("MainWindowX", 0)
  MainWindowHeight = ReadPreferenceLong("MainWindowHeight", 300)
  MainWindowWidth = ReadPreferenceLong("MainWindowWidth", 450)
EndProcedure 

Procedure SaveParameters()
  CreatePreferences("conf.ini")
  
  ;Paramètre généraux du programme
  WritePreferenceString("AppODBCsource", AppODBCsource)
  WritePreferenceString("AppODBCuser", AppODBCuser)
  WritePreferenceString("AppODBCpassword", AppODBCpassword)
  
  ;Paramètres de la fenêtre
  WritePreferenceLong("MainWindowX", MainWindowX)
  WritePreferenceLong("MainWindowY", MainWindowY)
  WritePreferenceLong("MainWindowHeight", MainWindowHeight)
  WritePreferenceLong("MainWindowWidth", MainWindowWidth)
EndProcedure

;-Début du programme

GetParameters()

OpenDatabase(#CG,AppODBCsource,AppODBCuser,AppODBCpassword)

;-#MainWindow
OpenWindow(#MainWindow,MainWindowX,MainWindowY,MainWindowWidth,MainWindowHeight,#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered,AppName + " " + AppVersion)

;-#MainWindow Toolbar
CreateToolBar(#MainToolbar,WindowID(#MainWindow))
  ToolBarStandardButton(#MainToolbar_Nouveau, #PB_ToolBarIcon_New)

;-#MainWindow Menu
CreateMenu(#MainMenu,WindowID(#MainWindow))
MenuTitle("Fichier")
  MenuItem(#MainMenu_Nouveau, "Nouveau")
  MenuBar()
  MenuItem(#MainMenu_Quitter,"Quitter")

;-#MainWindow StatusBar
CreateStatusBar(#MainStatusBar,WindowID(#MainWindow))

;-#MainWindow GadgetList
CreateGadgetList(WindowID(#MainWindow))

ListIconGadget(#ListIconGadgetHaut,0,0,0,0,"Haut",50)
ListIconGadget(#ListIconGadgetBas,0,0,0,0,"Bas",50)

;Il me faut la hauteur de la Toolbar et du statusbar pour positionner/dimensionner correctement mon Splitter
SplitterGadget(#SplitterGadget1,0,0,WindowWidth(),WindowHeight(),#ListIconGadgetHaut,#ListIconGadgetBas)

Repeat 
  AppEvent = WaitWindowEvent()
  If AppEvent = #PB_Event_CloseWindow
    Quit = 1
  ElseIf AppEvent = #PB_Event_Menu
    If EventMenuID() = #MainMenu_Quitter
      Quit = 1
    EndIf
  ElseIf AppEvent = #PB_Event_SizeWindow
    ExamineDesktops() 
    If WindowWidth() <> DesktopWidth(0) And WindowHeight() <> DesktopHeight(0)
      MainWindowX = WindowX()
      MainWindowY = WindowY()
      MainWindowHeight = WindowHeight()
      MainWindowWidth = WindowWidth()
      SaveParameters()
    EndIf
  EndIf 
Until Quit = 1
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Chris avait balancé ça , mais effectivement ça utilise l'api pour l'evenement

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- StatusBar Constants
Enumeration
  #StatusBar_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    hStBar = CreateStatusBar(#StatusBar_0, WindowID())
;**********************************************************
    ;- Récupération de la hauteur et de la largeur de la StatusBar
   
    HeightStBar = SendMessage_(hStBar,#SB_GETRECT,0,@Value.RECT)
    SB_Height = Value\bottom - Value\top
    SB_Length = Value\right - Value\left
;-*********************************************************
    Debug SB_Length
    Debug SB_Height
  EndIf
EndProcedure 
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

sinon en faisant ça ça marche :D


tu remplace par :

Code : Tout sélectionner

;;Il me faut la hauteur de la Toolbar et du statusbar pour positionner/dimensionner correctement mon Splitter
SplitterGadget(#SplitterGadget1,25,-50,WindowWidth()-50,WindowHeight(),#ListIconGadgetHaut,#ListIconGadgetBas)


voir le (-50) !!
et el (25)

que tu redimentionne comme tu veux ! :D
yann64
Messages : 33
Inscription : mer. 26/mai/2004 20:59
Contact :

Message par yann64 »

Merci Dobro :D
J'y avais pensé mais comme je suis un peu "coupeur de cheuveux en 4", je me suis dit qu'il y avais sûrement une manière plus "élégante" de faire ça. ça doit marvher sous linux, même si il est est possible que les barres d'outil et de status n'aient pas les même dimensions (je verais ça plus tard). En fait, je vais me contenter de cette solution pour l'instant, et faire une demande à Fred pour savoir si il est possible d'inclure les appels ToolBarHeight() et StatusBarHeight() dans les fonctions de PureBasic.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu dois bien avoir un équivalent de l'Api sous Linux, non?
yann64
Messages : 33
Inscription : mer. 26/mai/2004 20:59
Contact :

Message par yann64 »

Tout à fait, mais comme je voudrais que ce prog puisse se compiler indiférament sous linux ou windows, il me faudrait une commande PureBasic, et pas utiliser des API quelconques. En plus, je maitrise relativement mal l'API linux... :(
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Si tu arrives à savoir comment retrouver les dimensions de la barre d'outils et de la StatusBar sous Linux, il me semble qu'il y a des commandes qui sont prévues sous Pure pour compiler selon qu'on tourne sous un système ou sous un autre. (Voir les directives de compilations, dans l'aide.)

Par contre, pour Linux, je ne peux rien faire pour toi.
Répondre