Sauvegarder les dim et pos du dernier mode windowstate normal
cs_jaco2
Messages postés19Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention10 janvier 2006
-
6 juin 2005 à 09:44
cs_jaco2
Messages postés19Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention10 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
A voir également:
Sauvegarder les dim et pos du dernier mode windowstate normal
cs_jaco2
Messages postés19Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention10 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.
cs_jaco2
Messages postés19Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention10 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jaco2
Messages postés19Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention10 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