Sauvegarder les dim et pos du dernier mode windowstate normal

cs_jaco2 Messages postés 19 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 janvier 2006 - 6 juin 2005 à 09:44
cs_jaco2 Messages postés 19 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 janvier 2006 - 6 juin 2005 à 13:50
Bonjour,
mon problème :
J'ai une MDIForm dont je veux conserver les dimensions et positions en mode normal dans la base de registre pour les recharger au lancement suivant.
Tout est OK sauf dans le cas suivant : Je maximise la fenêtre puis je ferme. Les pos et dim sauvegardées sont donc celle de la fenêtre maximisée et je ne peux retrouver les dim et pos de la fenêtre normale.
Il me faut donc capturer les dernières pos et dim lorsue la fenêtre est en mode normal. J'utilise alors l'évènement resize qui malheureusement intervient après le redimensionnement et n'est pas appelé en cas de déplacement de la fenêtre.
Donc, si je déplace ma fen en mode normal puis je la maximise et la ferme, je n'ai pas sa position dans le précédent mode normal.
J'imerais éviter l'utilisation d'un timer ou d'un mouse move. Un évènement sur déplacement de la fenêtre serait suffisant (lequel ?) mais il y a sûrement mieux.
Si vous voyez une solution ?
Ais-je été clair ?????

Jaco

6 réponses

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
6 juin 2005 à 09:49
Tu peux sauvegarder les coordonnées et dimensions que lorsque tu quittes ton programme par exemple

++
Moustachu
0
cs_jaco2 Messages postés 19 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 janvier 2006
6 juin 2005 à 09:54
oui, merci,
mais si je quitte en windowstate maximized, j'ai dans mdiform.left (etc...) les pos et dim de ce mode (donc le plein écran) et pas du mode normal. C'est les coord et pos de ce dernier mode que je veux garder.

Jaco
0
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
6 juin 2005 à 10:35
Dans ce cas, sauvegarde les coordonnées dans le FORM_RESIZE en testant le statut de la fenêtre.. mais c'est un peu bourin

++
Moustachu
0
cs_jaco2 Messages postés 19 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 janvier 2006
6 juin 2005 à 11:39
C'et ce que je fais en conservant uniquement les données si le windowstate est normal.
Mais le form_resize n'est pas appelé quand tu bouges la fenêtre,. Bref, j'arrive à avoir les dimensions de la fenêtre mais pas sa position si on bouge la fenêtre.
Je vois guère qu'un contrôle timer pour récupérer mais là, c'est trop super bourrin, je peux pas.
Doit y avoir une autre soolution puisque Windows conserve bien celà quelquepart (quand tu reviens de maximized à normal, la fenêtre revient bien au bon endroit).
Je vais continuer de chercher ...
Merci

Jaco
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
6 juin 2005 à 12:56
Re,



Ok, je suis pas rapide à la compréhension... Peut être ce lien va pouvoir t'aider :



http://www.devx.com/tips/Tip/12039


Je ne sais pas ce que ça fait si ta fenêtre est MAX.


++
Moustachu
0
cs_jaco2 Messages postés 19 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 janvier 2006
6 juin 2005 à 13:50
Merci pour ta recherche,

J'ai fait un truc dans le même genre.
En fait, j'ai résolu ainsi :
dans query_unload, donc avant fermeture, je récupère le windowstate courant puis je bascule en fenêtre normale. Je récupère alors les coord et dim et je sauvegarde le tout dans la base de registre.
C'est du bidouillage et le changement d'état de la fenêtre est perceptible.
Mais, bon, çà marche.

J'aurais aimer trouver plus propre.
voici mon code

Private Sub MDIForm_Load()
Call Reg_LitFen(Me)
End Sub


Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim FenMax As Byte
If Me.WindowState <> 0 Then
FenMax = 2
Else
FenMax = 0
End If
Me.WindowState = 0
Call Reg_SauveFen(Me, FenMax)
End Sub

'Sauvegarde dans la base de registre des dim et pos de la fenêtre
Public Sub Reg_SauveFen(frmForm As Form, MaxFen As Byte)
Dim S As String
'On sauvegarde les propriétés de la form sous le format suivant
'MaxFen(1 si max, 0 si normale), left, top, width, height
S = MaxFen & "," & frmForm.Left & "," & frmForm.Top & "," & frmForm.Width & "," & frmForm.Height
SaveSetting App.EXEName, "SettingWindows", frmForm.Name, S
End Sub


'Récupération dans la base de registre des dim et pos de la fenêtre
Public Sub Reg_LitFen(frmForm As Form)
Dim tabS
Dim S As String
'On récupère les propriétés de la form
S = GetSetting(App.EXEName, "SettingWindows", frmForm.Name, "0")
If S <> "0" Then
'On split la chaîne setting
tabS = Split(S, ",")
'Affectation des données aux propriétés de la page
frmForm.WindowState = Val(tabS(0))
frmForm.Left = Val(tabS(1))
frmForm.Top = Val(tabS(2))
frmForm.Width = Val(tabS(3))
frmForm.Height = Val(tabS(4))
Else
frmForm.WindowState = 2 'max si rien dans la base de registre
End If
End Sub

Jaco
0
Rejoignez-nous