Petite procedure pour maximiser puis redimensionner un objet

Contenu du snippet

Sub SetFullSize (obj as Object) :
Cette procedure sert a maximiser un controle (et tout ses conteneurs) afin de l'afficher au maximum de sa taille sur l'ecran
C.a.d :
Elle commence par recuperer le controle form dans lequel est contenu le controle a redimensionner
puis elle redimensionne le controle et tout ses conteneurs a la taille de la fenetre et les place tout en haut a gauche de la fenetre, en sauvegardant avant les anciennes proprietes (height, width, top, left) dans la proprietes tag.

Sub SetNormalSize (obj as Object) :
Cette procedure sert restaurer la taille du controle (et tout ses conteneurs) afin de l'afficher comme elle etait avant d'appeler la procedure SetFullSize
C.a.d :
En parcourant tout les conteneurs du controle (ainsi que le controle lui meme), cette procedure recupere la proprietes tag de l'objet et restaure les proprietes sauvees (height, width, top, left) a partir de la proprietes tag.

Voila, c'est tout !
Ce n'est pas tres joli, mais pratique.

Petite remarque :
Afin de s'assurer que le control soit au dessus des autres qui ne sont par redimensionne, la ZOrder est resette a 0. Cela peut poser des soucis dans certains cas d'objets devant se superposer...

Source / Exemple :


Public Sub SetFullSize(obj As Object)
  Dim objFirst As Object
  Dim Frm As Form
  ' Save Object
  Set objFirst = obj
  'Get Form Object
  While Not TypeOf obj Is Form
    Set obj = obj.Container
  Wend
  Set Frm = obj
  ' Resize all object to form size
  Set obj = objFirst
  While Not TypeOf obj Is Form
    ' Save Properties (Height, Width, Top)
    obj.Tag = obj.Height & " - " & obj.Width & " - " & obj.Top & " - " & obj.Left
    ' Set New Properties to Max
    obj.Height = Frm.Height - 500
    obj.Width = Frm.Width - 500
    obj.Top = 100
    obj.Left = 100
    obj.ZOrder (0)
    ' Treat next Object Container
    Set obj = obj.Container
  Wend
End Sub

'Une autre version de SetFullSize, plus visuellement mais moins propre pour le code...!
Public Sub SetFullSize(obj As Object)
  Dim objTree As New collection
  Dim i As Integer
  Dim Frm As Form
  'Get Form Object
  While Not TypeOf obj Is Form
    objTree.Add obj
    Set obj = obj.Container
  Wend
  Set Frm = obj
  ' Resize all object to form size
  For i = objTree.Count To 2 Step -1
    ' Save Properties (Height, Width, Top)
    objTree(i).Tag = objTree(i).Height & " - " & objTree(i).Width & " - " & objTree(i).Top & " - " & objTree(i).Left
    ' Set New Properties to Max
    objTree(i).Height = Frm.Height
    objTree(i).Width = Frm.Width
    objTree(i).Top = 0
    objTree(i).Left = 0
    objTree(i).ZOrder (0)
  Next
  ' Save Properties (Height, Width, Top)
  objTree(i).Tag = objTree(i).Height & " - " & objTree(i).Width & " - " & objTree(i).Top & " - " & objTree(i).Left
  ' Set New Properties to Max
  objTree(i).Height = Frm.Height - 480
  objTree(i).Width = Frm.Width - 100
  objTree(i).Top = 0
  objTree(i).Left = 0
  objTree(i).ZOrder (0)
End Sub

Public Sub SetNormalSize(obj As Object)
  Dim SavedProperties
  ' For each object except Form
  While Not TypeOf obj Is Form
    ' Get Saved Properties (Height, Width, Top)
    SavedProperties = Split(obj.Tag, " - ")
    ' Blank tag properties
    obj.Tag = ""
    ' Restore Saved Properties (Height, Width, Top)
    obj.Height = SavedProperties(0)
    obj.Width = SavedProperties(1)
    obj.Top = SavedProperties(2)
    obj.Left = SavedProperties(3)
    ' Treat next Object Container
    Set obj = obj.Container
  Wend
End Sub

'Exemple d'utilisation
Private Sub DataGrid1_DblClick()
  If DataGrid1.Tag = "" Then
    SetFullSize DataGrid1
  Else
    SetNormalSize DataGrid1
  End If
End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.