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

XL 2010 Userform plein écran sans barre de titre

cathodique

XLDnaute Barbatruc
Bonjour,

Cette discussion est une suite de ma précédente

Il s'agit de 2 codes proposés par @patricktoulon (que je salue).

Dans la précédente discussion, il s'agissait d'ôter la barre de titre d'une userform, avec affichage en plein écran du formulaire et de l'application Excel.

Patrick m'a montré comme y arriver avec et sans APIs.

J'avais déjà dans ma tirelire un code de Patrick pour la mise en plein écran d'une userform.

J'avais cru qu'il me suffirait d'appeler les procédures l'une après l'autre pour avoir le résultat escompté:
Un formulaire en plein écran avec les différents contrôles à l'échelle et sans la barre de titre.

Je me suis lourdement trompé. Voci ce que j'ai fait:
VB:
Public Sub SameSizeApplication(Usf As Object)   'utilisé
   Dim ctl As Control, ratioW#, ratioH#, tbCw, i&

   With Application: ratioW = .UsableWidth / Usf.Width: ratioH = .Height / Usf.Height: End With
   Usf.Move 0, 0, Usf.Width * ratioW, Usf.Height * ratioH

   For Each ctl In Usf.Controls
      ctl.Move ctl.Left * ratioW, ctl.top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
      On Error Resume Next
      ctl.Font.Size = Round(ctl.Font.Size * Application.Min(ratioH, ratioW))
      On Error GoTo 0

      If TypeName(ctl) = "ListBox" Or TypeOf ctl Is ListBox Then
         If ctl.ColumnWidths <> "" Then
            tbCw = Split(Replace(ctl.ColumnWidths, " pt", ""), ";")
            For i = LBound(tbCw) To UBound(tbCw): tbCw(i) = val(tbCw(i)) * ratioW: Next
            ctl.ColumnWidths = Join(tbCw, ";")
         End If
      End If
   Next
End Sub

'''-------------------------------------
Public Sub ShowFullScreenUserForm(Usf As Object)
    Dim hwnd As Long
    hwnd = FindWindowA(vbNullString, Usf.Caption)

    ' Mettre le UserForm en plein écran sans barre de titre
    SetWindowLongA hwnd, -16, &H94080080
    ShowWindow hwnd, 3

    ' Ajuster les contrôles en fonction du nouveau format
    SameSizeApplication Usf
End Sub
Le formulaire s'affiche avec le barre de titre et n'occupe pas toute la hauteur de l'écran.

Merci pour votre aide.

Bon week-end
 
Solution
Merci, j'ai trouvé
VB:
Public Sub ShowFullScreenUserForm(Usf As Object)
   Dim hwnd As Long
   ' Ajuster les contrôles en fonction du nouveau format
   SameSizeApplication Usf

   hwnd = FindWindowA(vbNullString, Usf.Caption)
   ' Mettre le UserForm en plein écran sans barre de titre
   SetWindowLongA hwnd, -16, &H94080080
   ShowWindow hwnd, 3
End Sub
Ajuster format puis retirer la barre de titre.

cathodique

XLDnaute Barbatruc
Merci, j'ai trouvé
VB:
Public Sub ShowFullScreenUserForm(Usf As Object)
   Dim hwnd As Long
   ' Ajuster les contrôles en fonction du nouveau format
   SameSizeApplication Usf

   hwnd = FindWindowA(vbNullString, Usf.Caption)
   ' Mettre le UserForm en plein écran sans barre de titre
   SetWindowLongA hwnd, -16, &H94080080
   ShowWindow hwnd, 3
End Sub
Ajuster format puis retirer la barre de titre.
 

patricktoulon

XLDnaute Barbatruc
et oui c'est évident par ce que je rajoute les 21 à la place de l'api de redraw
donc les mesure peuvent être prises avant
cela dit tu fait deux foix le travail là
tu fait un samesize (donc sans api) et tu fait un showindow3
c'est pas encore bien clair chez toi mais je vois que ça vient
 

cathodique

XLDnaute Barbatruc
tu fait un samesize (donc sans api) et tu fait un showindow3
je t'avoue que très souvent chez moi c'est du charabia.
Comme par exemple, ton Alias dans l'API. En fait, je n'ai rien compris.
Remarque, quand je suis à la recherche d'une solution. je reconnais ne pas faire des recherches plus approfondis pour mieux comprendre.
Je le fais généralement après pour ne pas mourir idiot (en essayant de retenir quelque pour les prochaines fois).

Si je comprends bien SameSize et Showindow3 font la même chose?
ShowWindow hwnd, 3
j'aurai dû te demander ce que fait la ligne ci-dessus et que représente le 3
Merci d'éclairer ma lanterne.
 

patricktoulon

XLDnaute Barbatruc
du coup j'ai repris mon module resize et je t'en ai fait special cathodique
avec 3 userform en exemple
dans le module pour les form tu a la sub dimention en mode (1 ou 2)
a l'activate tu l'appelle en mode 1 et dans l'event resize de l'userform tu la rappelle en mode 2
et voila
là mon amis tu a tout ce qu'il te faut pour ce que tu voulais faire
a savoir masquer l'app avec le userform et comme il n'a pas de caption ben tu peux pas le deplacer comme il est modal
 

Pièces jointes

  • Plein Ecran.xlsm
    40.1 KB · Affichages: 8

cathodique

XLDnaute Barbatruc
Bonsoir @patricktoulon ,

Je te remercie pour ton aide et ton partage.
je t'avoue que je n'ai jamais pensé au UserForm_Resize.
Tu utilises le tag pour mémoriser la position et les dimensions des contrôles.
Est-ce que ça ne va pas interférer avec des contrôles dont on utilise déjà le tag (spécialement des boutons)?

Dans ta procédure, il y a 3 modes. Tu me montres l'utilisation du mode 1 et 2. Qu'en est-il du mode 3?

Encore merci. Toute ma gratitude.

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
re
a ben si justement si les tags sont utilisés ça va poser problème mais il y a d'autre moyen de mémoriser les dimensions me semble til on peut le faire dans les tooltiptext ou bien encore une variable tableau dont le userform serait le propriétaire en public ou bien encore un dictionnaire ou une collection bref des solutions il y en a des tas
 

cathodique

XLDnaute Barbatruc
Ok. Merci beaucoup.

Bonne soirée.
 

Discussions similaires

Réponses
2
Affichages
657
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…