Sauvegarde de l'état de la fenêtre

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Sauvegarde de l'état de la fenêtre

Message 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
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

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

Message par dayvid »

Ha oui, c'est vraiment très utile sa, merci :D
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

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

Message 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:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message par falsam »

Ce n'est pas si simple que ça, d'être simple. Pas mal Warkering :)
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