Techniques pour empecher le déchargement de la feuille

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 121 fois - Téléchargée 34 fois

Contenu du snippet

Hello la compagnie !

Je cherchai justement comment empecher le déchargement de la feuille et j'ai trouvé plusieurs méthodes. Une qui annule purement le déchargement dans Form_QueryUnload, une qui permet tout bêtement de cacher la croix (pas très bon mais je met tout de même, car ça cache tout les boutons de la barre de titre), et la derniere de griser la case system (croix de fermeture)

Source / Exemple :


'méthode du Form_QueryUnload
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = 1 'cancel est normalement à 0, le changer annule le déchargement.
End Sub

'ou avec une msgbox
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim Question As VbMsgBoxResult
Question = MsgBox("Etes-vous sûr(e) de vouloir quitter ?", vbQuestion + vbYesNo)
If Question = vbNo Then Cancel = 1
End Sub

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

'Pour masquer les controles de la barre de titre, dans la propriété ControlBox de votre form, mettez false

'Vous pouvez aussi le faire avec des APIs

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 Form_Initialize()
Dim hWnd As Long
hWnd = FindWindowA("ThunderFormDC", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub

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

'griser la croix, donné par Derrick soft dans le forum

Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPosition As Long, ByVal wFlags As Long) As Long

' Remove the Close menu item and disable the Close button
' from a window

Public Sub RemoveCloseMenuItem(ByVal hWnd As Long)
Const SC_CLOSE = &HF060
Const MF_BYCOMMAND = 0

Dim hMenu As Long
' get the system menu's handle
hMenu = GetSystemMenu(hWnd, 0)
' remove the Close item
RemoveMenu hMenu, SC_CLOSE, MF_BYCOMMAND
End Sub

Private Sub Form_Load()
RemoveCloseMenuItem (Me.hWnd)
End Sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Merci bien, donc vous pouvez remplacer cancel par 0,1,2,3,4,5 pour les éventuel débutants ;)
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Aller tient :
QueryUnload, événement


Se produit avant la fermeture d'une feuille ou d'une application. Lorsqu'un objet MDIForm se ferme, l'événement QueryUnload se produit d'abord pour lafeuille MDI, puis dans toutes les feuillesfilles MDI. Si aucune feuille n'annule l'événement QueryUnload, l'événement Unload se produit dans toutes les autres feuilles avant de s'appliquer à une feuille MDI. Lorsqu'une feuille fille ou un objet Form se ferme, l'événement QueryUnload de cette feuille intervient avant l'événement Unload de la feuille.

Syntaxe

Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)

La syntaxe de l'événement QueryUnload comprend les éléments suivants :

Élément Description
cancel Entier qui, si sa valeur est différente de 0, arrête l'événement QueryUnload dans toutes les feuilles chargées et empêche la fermeture de la feuille et de l'application.
unloadmode Valeur ou constante indiquant la cause de l'événement QueryUnload, comme indiqué dans la section Valeurs renvoyées.


Valeurs renvoyées

L'argument unloadmode renvoie les valeurs suivantes :

Constante Valeur Description
vbFormControlMenu 0 L'utilisateur a choisi dans le menu Système de la feuille la commande Fermeture.
vbFormCode 1 L'instruction Unload est invoquée à partir du code.
vbAppWindows 2 La session Microsoft Windows en cours prend fin.
vbAppTaskManager 3 Le Gestionnaire de tâches de Microsoft Windows ferme l'application.
vbFormMDIForm 4 Une feuille MDI fille se ferme en raison de la fermeture de la feuille MDI.
vbFormOwner 5 Une feuille se ferme en raison de la fermeture de son propriétaire.


Ces constantes sont répertoriées dans la bibliothèque d'objets Visual Basic (VB) de l'Explorateur d'objets.

Remarques

Cet événement est en principe utilisé pour s'assurer qu'il ne reste aucune tâche inachevée dans les feuilles d'une application avant sa fermeture. Par exemple, si un utilisateur n'a pas encore enregistré de nouvelles données dans une feuille quelconque, votre application peut l'inviter à procéder à leur enregistrement.

Lorsqu'une application se ferme, vous pouvez utiliser la procédure d'événement QueryUnload ou Unload pour affecter la valeur True à l'argument Cancel afin d'arrêter le processus de fermeture. Toutefois, l'événement QueryUnload se produit dans toutes les feuilles avant que le déchargement commence, tandis que l'événement Unload se produit lors du déchargement de chaque feuille.
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Oui en effet, ya pas MSDN en ligne ?
Messages postés
458
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009

étonnant que tu n'ai pas le msdn car il est livré avec le logiciel... lol... cà laisse sous entendre bcp :)
Messages postés
1115
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

Le problème c'est que j'ai pas la MSDN, pourrait nous indiquer ce que celle-ci te dit?
Afficher les 10 commentaires

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.