Croix de fermeture

L

lotusx

Guest
Bonsoir à tous,
Kelkun sait-il comment faire pour qu'une userform ne présente pas la "croix" de fermeture??

Merci.
 
@

@Christophe@

Guest
Bonsoir,

Pour masquer la croix je crois pas que cela sois possible, mais voici pour désactiver la croix de fermeture:

A mettre dans la code VBA de ton userform:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = True
End Sub


Bonne chance

@Christophe@
 
L

lotusx

Guest
J'te remercie mais ça marche pas. En fait, le but est le suivant: j'ai crée une userform qui lorsqu'on entre dans un fichier excel demande un mot de passe: 2 possibilités: ou l'utilisateur rentre le bon mot de passe et il accède au fichier ou il annule et il quitte le fichier. Le seul problème c'est que la croix de fermeture de la userform offre une 3 ème possibilité celle de pouvoir s'affranchir du mot de passe et ça c pas bien...
Voilà tu sais tout, je continue à réfléchir, si t'a une idée tu es très bien venu.

@+j'espère.
 
T

Thaiv_Lis

Guest
Bonjour,


Dans certain cas, il est intéressant de masquer complètement la croix.
Le code suivants marche bien. ( Code que j'ai trouvé sur ce site, je crois )


' *** Désactiver la croix d'un Userform
' *** A mettre dans partie déclaration du USerform

Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

' ------------------------------------

Private Sub UserForm_Initialize()
Dim hwnd As Long
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
End Sub

@+
 
L

Ludwig

Guest
Bonsoir à tous,

Voici une macro qui te permettra d'avoir ton userform entièrement transparent. Du coup plus de croix, plus rien sauf ton Textbox et tes deux bouttons.



Private frmRegion As Long, hWnd As Long, msg1 As String, msg2 As String

Private Sub UserForm_Initialize()
ChangeFormEffect
End Sub

Private Sub ChangeFormEffect()
Dim W As Single, H As Single, cl As Long, ct As Long, cw As Long, ch As Long
Dim i As Integer, R As Long, Outer As Long, Inner As Long

hWnd = FindWindow(vbNullString, Me.Caption)
W = Me.Width * 1.33: H = Me.Height * 1.33
frmRegion = CreateRectRgn(0, 0, 0, 0)

Const X As Single = 3: Const Y As Single = 22
Const RGN_OR = 2
Const RGN_DIFF = 4

For i = 0 To Me.Controls.Count - 1
If Me.Controls(i).Visible Then
ct = Y + (1.33 * Me.Controls(i).Top): ch = ct + (1.33 * Me.Controls(i).Height)
cl = X + (1.33 * Me.Controls(i).Left): cw = cl + (1.33 * Me.Controls(i).Width)
R = CreateRectRgn(cl, ct, cw, ch)
CombineRgn frmRegion, R, frmRegion, RGN_OR
End If
Next
SetWindowRgn hWnd, frmRegion, True
End Sub

Private Function Status() As Byte
Status = Sheets("Feuil1").Activate
End Function

J'espère que cela te conviendra.

A bientôt

Ludwig
 
L

Ludwig

Guest
Re bonsoir,

Excuse moi mais copiant le code j'en ai oublié une parite. Celle des 'option Explicit' à mettre en début de code.


Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private frmRegion As Long, hWnd As Long, msg1 As String, msg2 As String

Private Sub UserForm_Initialize()
ChangeFormEffect
End Sub
.........................................
.........................................
.........................................

La suite tu l'as connais.

Il est tard maintenant, il faut peut être que je pense à aller me coucher, sinon demain le réveil risque d'être difficile.

Je vous souhaite à tous un très bon dimanche et à très bientôt,

Ludwig
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Tri et Import
Réponses
4
Affichages
211

Statistiques des forums

Discussions
312 443
Messages
2 088 472
Membres
103 862
dernier inscrit
pln47