Page 1 sur 1

Sauvegarde de l'état de la fenêtre

Publié : lun. 18/oct./2010 8:07
par Warkering
Bonjour!

Après avoir patenter pendant plusieurs dizaines de minutes sur un mécanisme de ce genre, j'ai décider de le rendre publique, au cas où cela intéresserait quelqu'un!
Ce code sauvegarde à la fermeture du programme la position et la taille de la fenêtre, en plus de l'état, maximiser ou normale, de celle-ci.
Ne pas porter attention au superflu et nom des variables, :wink:

Code : Tout sélectionner

;----- Constantes -----

Enumeration
  #Tisseran
EndEnumeration

;----- Variables -----

Event = #Null
WindowX = #Null
WindowY = #Null
WindowWidth = #Null
WindowHeight = #Null
WindowFlags = #Null

;----- Initialisation -----

OpenPreferences("Préférences.txt")
  PreferenceGroup("Fenêtre pricipale")
  WindowX = ReadPreferenceInteger("Position en X", 64)
  WindowY = ReadPreferenceInteger("Position en Y", 64)
  WindowWidth = ReadPreferenceInteger("Largeur", 320)
  WindowHeight = ReadPreferenceInteger("Hauteur", 240)
  WindowFlags = ReadPreferenceInteger("État", 0)
ClosePreferences()

Select WindowFlags
  Case 0:
    WindowFlags = #PB_Window_Normal
  Case 1:
    WindowFlags = #PB_Window_Maximize
  Default:
    WindowFlags = #PB_Window_Normal
EndSelect

WindowFlags = #PB_Window_SystemMenu|WindowFlags|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget

;----- Démarrage -----

OpenWindow(#Tisseran, WindowX, WindowY, WindowWidth, WindowHeight, "Tisseran", WindowFlags)

;----- Boucle principale -----

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow:
      Break
    Case #PB_Event_SizeWindow:
      If GetWindowState(#Tisseran) = #PB_Window_Normal
        WindowWidth = WindowWidth(#Tisseran)
        WindowHeight = WindowHeight(#Tisseran)
        WindowFlags = 0
      ElseIf GetWindowState(#Tisseran) = #PB_Window_Maximize
        WindowFlags = 1
      EndIf
    Case #PB_Event_MoveWindow:
      If GetWindowState(#Tisseran) = #PB_Window_Normal
        WindowX = WindowX(#Tisseran)
        WindowY = WindowY(#Tisseran)
        WindowFlags = 0
      ElseIf GetWindowState(#Tisseran) = #PB_Window_Maximize
        WindowFlags = 1
      EndIf
  EndSelect
ForEver

;----- Fermeture -----

CreatePreferences("Préférences.txt")
  PreferenceGroup("Fenêtre pricipale")
  WritePreferenceInteger("Position en X", WindowX)
  WritePreferenceInteger("Position en Y", WindowY)
  WritePreferenceInteger("Largeur", WindowWidth)
  WritePreferenceInteger("Hauteur", WindowHeight)
  WritePreferenceInteger("État", WindowFlags)
ClosePreferences()

End

Re: Sauvegarde de l'état de la fenêtre

Publié : lun. 18/oct./2010 12:57
par dayvid
Ha oui, c'est vraiment très utile sa, merci :D

Re: Sauvegarde de l'état de la fenêtre

Publié : lun. 18/oct./2010 13:04
par Ar-S
sympa Warkering,
Je te conseils tout de même d'ajouter une vérification pour tes fichiers prefs.

Code : Tout sélectionner

If OpenPreferences("Pref.txt")=0
  MessageRequester("Erreur","Fichier Prefs Introuvable, les paramètres de la fenêtre ne vont pas être chargés",#MB_ICONEXCLAMATION)
Else
  PreferenceGroup("MAIN") 
  WindowX = ReadPreferenceInteger("Position en X", 64) 
  WindowY = ReadPreferenceInteger("Position en Y", 64) 
  WindowWidth = ReadPreferenceInteger("Largeur", 320) 
  WindowHeight = ReadPreferenceInteger("Hauteur", 240) 
  WindowFlags = ReadPreferenceInteger("Etat", 0) 
  ClosePreferences() 
EndIf
Idem pour le CreatePreferences.
Évite aussi les accents dans les noms de fichiers, c'est une bonne habitude à prendre.

Re: Sauvegarde de l'état de la fenêtre

Publié : lun. 18/oct./2010 14:59
par Warkering
Merci Ar-S, mais je ne pense pas que la vérification soit nécessaire.
Il est bien écris dans la documentation que si l'on essaie de lire le fichier de configuration sans qu'il soit ouvert, les valeurs par défaut sont automatiquement renvoyées. Par contre, il est vrai que ce serais judicieux pour le CreatePreferences, au cas où le répertoire serait en lecture seul ou un problème quelconque. Je dois dire que j'ai fais ce code dans les petites heures du matin, là où je suis le plus apte à la création mais aussi là où j'ai le plus hâte d'atteindre mon lit après une fin de semaine plutôt festive! :mrgreen:
Pour les accents, j'essaie d'offrir à l'utilisateur une interface en français intégrale. Libre à vous de modifier le code, ce n'est qu'un exemple! :wink:

Re: Sauvegarde de l'état de la fenêtre

Publié : lun. 18/oct./2010 16:23
par falsam
Ce n'est pas si simple que ça, d'être simple. Pas mal Warkering :)