Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Redimensionner un UserForm après le retrait de la barre du menu système (Caption)

Dudu2

XLDnaute Barbatruc
Bonjour,

Suite à un sujet récent sur une barre de progression dont on peut retirer le Caption (la barre de menu système) via l'API, se pose la question de redimensionner le UserForm à sa taille sans le Caption.

En faisant un fichier de test j'ai (je pense) trouvé une solution qui n'est pas simple du tout et sur laquelle j'ai passé pas mal de temps.

Edit: je retire les commentaires de ce post car une solution beaucoup plus simple est proposée au post suivant.

Il y a peut-être un moyen encore plus simple en jouant sur les flags lors du retrait de la barre de menu système (le Caption) du UserForm via l'API. Avis aux experts !
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Moi je ne peux rien tirer du Window RECT car il est toujours égal à celui du UserForm.
Attention de bien mettre des DoEvents avant de capturer les dimensions !
 

Pièces jointes

  • Redimensionner un UserForm sans le Caption TEST avec Window RECT.xlsm
    50.1 KB · Affichages: 4

Dudu2

XLDnaute Barbatruc
Ok, pas de soucis. De toutes façons je n'y crois guère.
En arrondis, je pense qu'Excel déconne avec le rajout du Caption qui raccourci la Height de -0.75 points et de l'InsideHeight de -0.15 point par rapport au UserForm d'origine, car le bottom du Label rose n'a pas bougé et déborde alors de ces 0.15 point du UserForm.

Je ne vais pas chercher plus loin car c'est peu significatif, sauf si l'opération est répétée en boucle sur le UserForm après rajout du Caption (à tester aussi) pour voir si la réduction des Height et InsideHeight se poursuit.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
@Dudu2
attention chez moi le RECT c'est celui d'une frame dynamique
pas celui du userform
je met une frame dynamico je prend le rectangle par le getwindowsrect sur son handle
la comparaison des deux me sert juste pour le redescendre pour éviter l'effet de sursaut

en gros le userform à la fin fait la dimension de la frame grace a son rect converti en points
n'oublie pas chez toi 0.6
 

Dudu2

XLDnaute Barbatruc
Oui, ok tu fais un Frame mais je sais pas comment je pourrais l'exploiter pour corriger le problème très étrange des arrondis cité ci-dessus. De mon point de vue c'est un bug Excel sauf si j'ai mal pris la mesure initiale qui réduirait aussi de fractions de point la Height et l'InsideHeight. Mais je ne peux pas le vérifier.

Concernant les Pixel / Point, ajoute cette fonction qui vient d'ailleurs de ton instruction de lecture du Registre pour ne pas avoir à modifier le code.
VB:
'----------------
'Version SANS API (100% exact, un Static pour éviter le Shell à chaque fois)
'----------------
Function PointToPixel() As Double
    Static SavePointToPixel As Double
  
    If SavePointToPixel = 0 Then
        SavePointToPixel = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / Application.InchesToPoints(1)
    End If
    PointToPixel = SavePointToPixel
End Function
 

Dudu2

XLDnaute Barbatruc
Merci à vous 2.
C'est intéressant car @TooFatBoy qui a les coins carrés a le même phénomène que @ChTi160 qui a les coins ronds (je parle des UserForm bien sûr ). Donc ce n'est pas lié aux coins => 1 enseignement.
Entre l'original et le final reconstitué on perd 0.75 en Height et 0.15 en InsideHeight.
Ce n'est pas du tout le cas chez moi !
Par contre les Width et InsideWidth restent identiques dans tous les cas.

@TooFatBoy et @ChTi160 si tu n'as pas les petits enfants dans les bras, je vous demande un test supplémentaire SVP.
Une fois les 4 étapes réalisées, pouvez-vous revenir directement en étape 2, 3 et 4 et capturer l'écran.
C'est pour voir si la réduction entre l'original (en fait la 1ère reconstitution) est à nouveau réduit ou s'il reste stable.
 

Dudu2

XLDnaute Barbatruc
Avec ce fichier si possible où j'ai ajouté un tableau de différences final - initial.

Pour info chez moi.
 

Pièces jointes

  • Redimensionner un UserForm sans le Caption TEST avec Window RECT.xlsm
    51.8 KB · Affichages: 4
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour tout le monde,

sur ma petite bécane, Windows7 64 bits, Excel 2010 32 bits


Bonne journée
 

Dudu2

XLDnaute Barbatruc
@ChTi160, ton test montre que la réduction ne s'accroit pas avec un nouveau cycle, ce qui est une bonne nouvelle. On va pas pleurer pour 0.75 point perdus en Height et 0.15 point dans l'InsideHeight et semble-t-il 0.30 point gagné en InsideWidth.
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…