IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer historique des Minimized/Maximized


Sujet :

VB.NET

  1. #1
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut Récupérer historique des Minimized/Maximized
    Bonjour,

    Dans une application que je développe, le suis en train de créer une fonction de sauvegarde/restitution de l'environnement de travail (on sauvegarde l'état des formulaires en cours, on ferme l'appli, on la réouvre et si on restaure l'environnement toutes les fenêtres de la sauvegarde sont restituées dans l'état où elles étaient lors de la sauvegarde).

    Je réussi à restituer les formulaires ouverts dans leur position et leur taille, mais ce n'est pas parfait comme je voudrais pour les fenêtres minimized/maximized lors de la sauvegarde.

    Quand on a un form quelconque d'ouvert dans une appli, qu'on le maximized puis qu'on le minimized, sur quitter du minimized, il revient en maximized et sur quitter du maximized il revient à sa position et sa taille d'origine.

    L'état actuel d'un form est dans le WindowState du form, mais où sont stockés les états N-1 et éventuellement N-2 du form qui permettent à vb.net de gérer le cycle de changements d'états décrits ci-avant?

    Je ne sais pas si je suis super clair, mais merci d'avance de vos réponses.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153

  3. #3
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Bonjour baloub,

    tout d'abord merci pour ta réponse, mais j'avoue que c'est chaud:
    - Après avoir planté mon appli suite à un problème de déclaration des références , j'ai réussi à mettre en place le GetWindowPlacement et le SetWindowPlacement.
    - Ensuite j'ai mis ce bout de code dans la boucle qui parcoure les formulaires ouverts de mon appli lors de la sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim intRet As Integer
                    Dim wpTemp As WindowPlacement
                    wpTemp.Length = System.Runtime.InteropServices.Marshal.SizeOf(wpTemp)
                    intRet = SafeNativeMethods.GetWindowPlacement(MonForm.Ecran.Handle.ToInt32, wpTemp)
    le "MonForm.Ecran" est le pointeur que j'utilise dans le reste de la boucle pour pointer sur le formulaire en cours de sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    ' Création de la Balise <PositionX></PositionX>
                    XmlPositionX = MaSauvegarde.CreateElement("PositionX")
                    XmlPositionX.InnerText = MonForm.Ecran.Location.X
                    XmlFormulaire.AppendChild(XmlPositionX)
     
                    ' Création de la Balise <PositionY></PositionY>
                    XmlPositionY = MaSauvegarde.CreateElement("PositionY")
                    XmlPositionY.InnerText = MonForm.Ecran.Location.Y
                    XmlFormulaire.AppendChild(XmlPositionY)
    Je pense donc que c'est lui qu'il faut que je passe comme argument à GetWindowPlacement.

    Par contre il doit y avoir un problème car quel que soit l'état (minimized, maximized...) ou la position de MonForm.Ecran, j'ai toujours un retour de wpTemp constant où typiquement le formulaire est vu Normal qu'il soit minimized ou maximized ou normal.....

    Il y a juste la minposition qui passe de -1/-1 à -32000/-32000 quand je minimize le formulaire (preuve que je doit quand même pointer sur le bon objet dans le passage de paramètres).

    Si tu as un conseil, je suis preneur, sinon je crois que je vais revoir mes prétentions un peu à la baisse.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  4. #4
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Triple buse que je suis, je viens de me rendre compte que j'ai placé mon bout de code de test juste après le moment où je forçais le retour de l'écran à sa taille normale pour mémoriser sa taille/position.

    Baloud ne tiens pas compte de ma réponse précédente, je creuse car ça a bien l'air de donner le résultat attendu.

    Je refais un post quand ça aura un peu avancé.
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations forums :
    Inscription : Mars 2011
    Messages : 105
    Points : 153
    Points
    153
    Par défaut
    Ok, on verra.
    Je te met quand même une routine que j'utilise pour déterminer l'état d'une fenêtre (en plus du normal, maximisé et minimisé, j'ai besoin de déterminer la visibilité, le full screen et le hors écran)
    J'utilise deux autres api:
    - IsWindowVisible pour la visibilité
    - GetWindowRect pour les positions/dimensions
    Dans la structure "WindowPlacement" je me sert surtout de "showCmd"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Public Class Saisie
       Public Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As IntPtr, ByRef lpwndpl As WINDOWPLACEMENT) As Integer
       Public Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As IntPtr, ByRef lpRect As Rectangle) As Boolean
       Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As IntPtr) As Boolean
       Public Structure WINDOWPLACEMENT
            Public Length As Integer
            Public flags As Integer
            Public showCmd As Integer
            Public ptMinPosition As Point
            Public ptMaxPosition As Point
            Public rcNormalPosition As Rectangle
       End Structure
     
       Private Function determine_etat_fenetre(ByVal hdle As IntPtr) As Integer
            ' 0 : fenêtre normale
            ' 1 : fenêtre maximisée
            ' 2 : fenêtre réduite
            ' 3 : fenêtre full screen
            ' 4 : fenêtre hors écran
            ' 5 : fenêtre invisible
            If Not IsWindowVisible(hdle) Then
                Return 5 'fenêtre invisible
            End If
            Dim wp As WINDOWPLACEMENT
            wp.Length = Marshal.SizeOf(wp)
            Dim result As Integer = GetWindowPlacement(hdle, wp)
            Dim rect As New Rectangle(0, 0, 1, 1)
            GetWindowRect(hdle, rect)
     
            Select Case wp.showCmd
                Case 1 ' fenêtre standard ou plein écran
                    If rect.X = 0 And rect.Y = 0 And rect.Width >= (ecranW - 1) And rect.Width <= ecranW + 1 And rect.Height >= (ecranH - 1) And rect.Height <= ecranH + 1 Then
                        Return 3 'plein écran
                    ElseIf wp.rcNormalPosition.Left > ecranW Or wp.rcNormalPosition.Right < 0 Or wp.rcNormalPosition.Top > ecranH Or wp.rcNormalPosition.Bottom < 0 Then
                        Return 4 ' fenêtre hors écran
                    Else
                        Return 0 'fenêtre normale
                    End If
                Case 2 ' réduit 
                    Return 2
                Case 3 ' fenêtre au max ou plein écran
                    If rect.X = 0 And rect.Y = 0 And rect.Width >= (ecranW - 1) And rect.Width <= ecranW + 1 And rect.Height >= (ecranH - 1) And rect.Height <= ecranH + 1 Then
                        Return 3
                    Else
                        Return 1
                    End If
                Case Else
                    Return -1
            End Select
        End Function
    End Class

  6. #6
    Membre du Club Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 147
    Points : 55
    Points
    55
    Par défaut
    Ca marche

    C'est diabolique le GetWindowPlacement et le SetWindowPlacement, ça fait exactement ce que je voulais.

    Merci beaucoup baloub
    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2015, 10h00
  2. [VB6 - Access]Récupérer description des champs d'une table
    Par New dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/11/2014, 14h53
  3. [Hudson] Remote API : récupérer l'historique des builds
    Par sleepy2002 dans le forum Intégration Continue
    Réponses: 6
    Dernier message: 23/05/2008, 16h46
  4. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo