Accueil > > > USERFORM AVEC FONCTIONS MAXIMISER, MINIMISER ET ETIRABLE UTILISANT LES API WINDOWS
USERFORM AVEC FONCTIONS MAXIMISER, MINIMISER ET ETIRABLE UTILISANT LES API WINDOWS
Information sur la source
Description
Pour un autre code en cours de développement, j'avais besoin d'avoir un Userform avec les possibilité de dimensionnement d'une fenêtre classique (bouton maximiser, minimiser, etc...).
Afin de pouvoir l'utiliser sur plusieurs Userform, j'ai décidé de mettre ce code sous forme de Classe qui peut alors être incluse dans tout projet existant ou à venir.
Ce code a été développé sur Word 2000. Il est à mon avis compatible Excel et autre version des deux programmes.
Remarque: C'est ma première contribution, alors je suis ouvert à toute critique (constructive, bien sur)
Merci à tous ceux qui postent des codes ici, ils sont une source inépuisable de trucs & astuces (bien plus que l'aide de Micromachin)
Source
- 'Dans votre projet insérez une classe nommée "UFCustomProperties" dont voici le code:
-
- '*** Définitions des variables locales & fonctions ***
- ' Fonction d'acquisition de l'identifiant de la fenêtre active
- Private Declare Function GAW Lib "user32" Alias "GetActiveWindow" () As Long
- ' Fonction d'acquisition du titre de la Window hwnd
- Private Declare Function GWT Lib "user32" Alias "GetWindowTextA" _
- (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
- ' Fonction de changement du titre de la Window hwnd (si existant)
- Private Declare Function SWT Lib "user32" Alias "SetWindowTextA" _
- (ByVal hwnd As Long, ByVal lpString As String) As Boolean
- ' Fonction d'acquisition
- Private Declare Function GWL Lib "user32" Alias "GetWindowLongA" _
- (ByVal hwnd As Long, ByVal nIndex As Long) As Long
- ' Fonction de changement
- Private Declare Function SWL Lib "user32" Alias "SetWindowLongA" _
- (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
-
- ' Déclaration des variables internes
- Private Const GWL_STYLE As Long = -16
- Private Const WS_THICKFRAME = &H40000 'Cadre fin pour redimensionnement
- Private Const WS_MINIMIZEBOX = &H20000 'Bouton "Réduire"
- Private Const WS_MAXIMIZEBOX = &H10000 'Bouton "Agrandir"
- Private Const WS_MINIMIZED = &H20000000 'Etat Réduit
- Private Const WS_MAXIMIZED = &H1000000 'Etat Agrandi
- Private Const WS_FULLSIZING = &H70000 'Les 3 propriétés ensembles
-
- Private stTmp As String, lgTmp As Long, lgRet As Long, Whdl As Long
-
- '*** Acquisition du Handle de la Userform ***
- '*** pour initialisation ***
- Public Function Initialisation()
- Whdl = GAW
- End Function
-
- '*** Définition des propriétés ***
- ' Bouton Agrandir
- Public Property Get MaximizeBox() As Boolean
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- If OldProp = (OldProp Or WS_MAXIMIZEBOX) Then
- MaximizeBox = True
- Else
- MaximizeBox = False
- End If
- End Property
- Public Property Let MaximizeBox(Enable As Boolean)
- If MaximizeBox <> Enable Then
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- SWL Whdl, GWL_STYLE, OldProp Xor WS_MAXIMIZEBOX 'Changement propriétés
- End If
- End Property
- ' Bouton Réduire
- Public Property Get MinimizeBox() As Boolean
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- If OldProp = (OldProp Or WS_MINIMIZEBOX) Then
- MinimizeBox = True
- Else
- MinimizeBox = False
- End If
- End Property
- Public Property Let MinimizeBox(Enable As Boolean)
- If MinimizeBox <> Enable Then
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- SWL Whdl, GWL_STYLE, OldProp Xor WS_MINIMIZEBOX 'Changement propriétés
- End If
- End Property
- ' Etat Agrandi
- Public Property Get Maximized() As Boolean
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- If OldProp = (OldProp Or WS_MAXIMIZED) Then
- Maximized = True
- Else
- Maximized = False
- End If
- End Property
- ' Etat Réduit
- Public Property Get Minimized() As Boolean
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- If OldProp = (OldProp Or WS_MINIMIZED) Then
- Minimized = True
- Else
- Minimized = False
- End If
- End Property
- ' Cadre de re-dimensionnement
- Public Property Get ThickFrame() As Boolean
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- If OldProp = (OldProp Or WS_THICKFRAME) Then
- ThickFrame = True
- Else
- ThickFrame = False
- End If
- End Property
- Public Property Let ThickFrame(Enable As Boolean)
- If ThickFrame <> Enable Then
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- SWL Whdl, GWL_STYLE, OldProp Xor WS_THICKFRAME 'Changement propriétés
- End If
- End Property
- ' Tous les attributs de Re-dimensionnement
- Public Function FullSizing()
- OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
- SWL Whdl, GWL_STYLE, OldProp Or WS_FULLSIZING 'Changement propriétés
- End Function
-
- ' Changement de titre
- ' ATTENTION: L'utilisation de la propriété "Caption" pour changer
- ' le titre de la fenêtre inhibe les boutons "Agrandir" & "Réduire"
- Public Property Get Title() As String
- 'Acquisition Titre pour cohérence avec changement
- 'la propriété "Caption" peut être utilisée pour
- 'acquérir le titre de la Userform
- stTmp = Space$(120)
- lgTmp = 119
- GWT Whdl, stTmp, lgTmp
- Title = stTmp
- End Property
- Public Property Let Title(NewTitle As String)
- SWT Whdl, NewTitle
- End Property
-
- ' Dans un Userform ajoutez le code suivant
-
- Public CustomProperties As UFCustomProperties
-
- '*** Initialisation des propriétés de la fenêtre ***
- Private Sub UserForm_Activate()
- Set CustomProperties = New UFCustomProperties
- Me.CustomProperties.Initialisation 'Acquisition du Handle de la Userform
-
- Me.CustomProperties.FullSizing
-
- ' Move la Userform pour faire apparaître les boutons
- ' Sinon il n'apparaisse qu'aprés avoir bougé la Userform
- ' Je ne sais pas pourquoi mais c'est comme ça
- Me.Left = Me.Left + 1
- Me.Left = Me.Left - 1
- End Sub
'Dans votre projet insérez une classe nommée "UFCustomProperties" dont voici le code:
'*** Définitions des variables locales & fonctions ***
' Fonction d'acquisition de l'identifiant de la fenêtre active
Private Declare Function GAW Lib "user32" Alias "GetActiveWindow" () As Long
' Fonction d'acquisition du titre de la Window hwnd
Private Declare Function GWT Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
' Fonction de changement du titre de la Window hwnd (si existant)
Private Declare Function SWT Lib "user32" Alias "SetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String) As Boolean
' Fonction d'acquisition
Private Declare Function GWL Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
' Fonction de changement
Private Declare Function SWL Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
' Déclaration des variables internes
Private Const GWL_STYLE As Long = -16
Private Const WS_THICKFRAME = &H40000 'Cadre fin pour redimensionnement
Private Const WS_MINIMIZEBOX = &H20000 'Bouton "Réduire"
Private Const WS_MAXIMIZEBOX = &H10000 'Bouton "Agrandir"
Private Const WS_MINIMIZED = &H20000000 'Etat Réduit
Private Const WS_MAXIMIZED = &H1000000 'Etat Agrandi
Private Const WS_FULLSIZING = &H70000 'Les 3 propriétés ensembles
Private stTmp As String, lgTmp As Long, lgRet As Long, Whdl As Long
'*** Acquisition du Handle de la Userform ***
'*** pour initialisation ***
Public Function Initialisation()
Whdl = GAW
End Function
'*** Définition des propriétés ***
' Bouton Agrandir
Public Property Get MaximizeBox() As Boolean
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
If OldProp = (OldProp Or WS_MAXIMIZEBOX) Then
MaximizeBox = True
Else
MaximizeBox = False
End If
End Property
Public Property Let MaximizeBox(Enable As Boolean)
If MaximizeBox <> Enable Then
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
SWL Whdl, GWL_STYLE, OldProp Xor WS_MAXIMIZEBOX 'Changement propriétés
End If
End Property
' Bouton Réduire
Public Property Get MinimizeBox() As Boolean
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
If OldProp = (OldProp Or WS_MINIMIZEBOX) Then
MinimizeBox = True
Else
MinimizeBox = False
End If
End Property
Public Property Let MinimizeBox(Enable As Boolean)
If MinimizeBox <> Enable Then
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
SWL Whdl, GWL_STYLE, OldProp Xor WS_MINIMIZEBOX 'Changement propriétés
End If
End Property
' Etat Agrandi
Public Property Get Maximized() As Boolean
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
If OldProp = (OldProp Or WS_MAXIMIZED) Then
Maximized = True
Else
Maximized = False
End If
End Property
' Etat Réduit
Public Property Get Minimized() As Boolean
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
If OldProp = (OldProp Or WS_MINIMIZED) Then
Minimized = True
Else
Minimized = False
End If
End Property
' Cadre de re-dimensionnement
Public Property Get ThickFrame() As Boolean
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
If OldProp = (OldProp Or WS_THICKFRAME) Then
ThickFrame = True
Else
ThickFrame = False
End If
End Property
Public Property Let ThickFrame(Enable As Boolean)
If ThickFrame <> Enable Then
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
SWL Whdl, GWL_STYLE, OldProp Xor WS_THICKFRAME 'Changement propriétés
End If
End Property
' Tous les attributs de Re-dimensionnement
Public Function FullSizing()
OldProp = GWL(Whdl, GWL_STYLE) 'Acquisition propriétés
SWL Whdl, GWL_STYLE, OldProp Or WS_FULLSIZING 'Changement propriétés
End Function
' Changement de titre
' ATTENTION: L'utilisation de la propriété "Caption" pour changer
' le titre de la fenêtre inhibe les boutons "Agrandir" & "Réduire"
Public Property Get Title() As String
'Acquisition Titre pour cohérence avec changement
'la propriété "Caption" peut être utilisée pour
'acquérir le titre de la Userform
stTmp = Space$(120)
lgTmp = 119
GWT Whdl, stTmp, lgTmp
Title = stTmp
End Property
Public Property Let Title(NewTitle As String)
SWT Whdl, NewTitle
End Property
' Dans un Userform ajoutez le code suivant
Public CustomProperties As UFCustomProperties
'*** Initialisation des propriétés de la fenêtre ***
Private Sub UserForm_Activate()
Set CustomProperties = New UFCustomProperties
Me.CustomProperties.Initialisation 'Acquisition du Handle de la Userform
Me.CustomProperties.FullSizing
' Move la Userform pour faire apparaître les boutons
' Sinon il n'apparaisse qu'aprés avoir bougé la Userform
' Je ne sais pas pourquoi mais c'est comme ça
Me.Left = Me.Left + 1
Me.Left = Me.Left - 1
End Sub
Conclusion
Dans cet exemple on active toutes les propriétés (fonction "FullSizing")
Le code de la classe permet de les gérer individuellement (utile si on veut interdire le maximiser etc...)
ATTENTION:
L'utilisation de la propriété "Caption" pour changer le titre de la fenêtre inhibe les boutons "Agrandir" & "Réduire", utilisez alors UFCustomProperties.Title
Enfin, aprés avoir activé ou désactivé les boutons Maximiser et/ou minimiser, il faut bouger la Userform pour raffraichir l'affichage (je ne sais pas pourquoi).
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Minimiser Userform [ par fne67 ]
j'ai créé un userform dans une application Excel, la programmation pour minimier un userform fonctionne avec un userform vierge et pas avec mon applic
dimension d'une fenètre [ par eckostreet ]
allo a tous Je cherche une façon d'avoir la dimension d'une fenètre... comme information j'utilise l'api FindWindow pour identifié la fènetre. Une so
Menu déroulant (validation données) : affecter une variable d'un UserForm [ par Polochon69 ]
Bonjour, Je ne sais pas si le titre est assez explicite, difficile de résumer en quelques mots ! Pour être précis, je crée un menu déroulant en VBA (
Probleme de Date avec UserForm [ par DVTAZ ]
bonjour Je voudrais recuperer une date qui ce trouve dans une case texte du Userform pour la placer dans les cellules d'une page excel. colonne A1 la
Interception des caractères du Clavier? [ par Cjvg ]
Bonjour, J'utilise l'api [b]GetAsyncKeyState[/b] pour intercepter les entrées Clavier. Cette Api, comme je l'utilise dans mon projet, n'empêche pas l
enregistrement de données de userform dans un tableau excel sous conditions de ligne [ par Otantik972 ]
Bonjour, Je suis un jeune apprentin ingénieur et je débute en vb. Je souhaiterais que l'enregistrement des saisies dans mon tableau récap se fasse au
Ajouter une CheckBox dans une UserForm avec une macro [ par CarolineBouteloup ]
Bonjour, Je souhaiterais pourvoir ajouter de manière permanente des CheckBox dans un Userform en VBA. Une première macro va chercher des information
Ptit souci de syntaxe [ par Otantik972 ]
Bonjour j'ai un souci de syntaxe qui me pose problème dans la finition de mon projet. Je veux pourvoir reouvrir la userform que j'ai préalablement m
Userfor et Textbox [ par devilprinprin ]
Bonjour à tous, J'aimerai un petit coup de pouce parce que là c'est énervant. [^^happy3] J'ai deux userform. Sur le premier, je renseigne, dans deu
FORCER LE REMPLISSAGE D'UN USERFORM [ par SERIEUXETCOOL ]
(Une nouvelle fois dsl si je ne poste pas mon message au bon endroit) Bonjour à tous, J'ai un petit problème qui concerne les userforms. Voila je cr
|
Derniers Blogs
PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio
Forum
FONCTION EXCEL VBAFONCTION EXCEL VBA par samanta26
Cliquez pour lire la suite par samanta26
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|