Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TECHNIQUES POUR EMPECHER LE DÉCHARGEMENT DE LA FEUILLE


Information sur la source

Catégorie :Formulaire Niveau : Débutant Date de création : 14/08/2004 Vu : 4 507

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


Description

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

  • '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
'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

Commentaires et avis

signaler à un administrateur
Commentaire de BigBadboy le 14/08/2004 10:15:21

Merci gars !!!
Ca va m'être tres utile.
Bonne prog a tous

signaler à un administrateur
Commentaire de tmcuh le 14/08/2004 11:33:30

je connaissais le système du cancel à 1 mais par contre pour l'api pas mal, mais un peu lourd quand meme,... ne serait-il pas préférable de changer directemetn les valeurs de la feuille comme le borderstyle et controlbox? enfin moi perso j'utilise les ces propriétés, maintenant celui qui veut s'amuser avec les api m'as foi... lol

Amicalement TMCUH

signaler à un administrateur
Commentaire de NHenry le 19/08/2004 11:10:13

Par exemple, quand tu quitte windows (ou la sesion), UnloadMode te donne une valeur,  il est intéressent de pouvoir connaitre pourquoi la feuille se décharge pour connaitre quelle question poser : si l'appli se ferme, on demande confirmation de la fermeture et/ou l'enregistrement d'un fichier; si windows se ferme on demande juste si on veut enreg le fichier, impossible d'annuler la fermeture.

signaler à un administrateur
Commentaire de azerty25 le 22/08/2004 14:54:07

En fait, il faut juste agir sur la prop controlbox et sa masque les 3 boutons.
NHenry, tu connait ces valeurs ? Je sais juste que 0 c'est fermture par la croix mais le reste je sais pas, je ne peux pas non plus tester car faut pas que je redémarre pour l'instant.

signaler à un administrateur
Commentaire de NHenry le 26/08/2004 11:16:37

Dans le MSDN que j'ai eu avec VB, j'ai fais F1 sur QueryUnload et il m'a fourni les valeurs/constantes de UnloadMode.

signaler à un administrateur
Commentaire de azerty25 le 26/08/2004 11:43:07

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

signaler à un administrateur
Commentaire de tmcuh le 26/08/2004 12:43:56

étonnant que tu n'ai pas le msdn car il est livré avec le logiciel... lol... cà laisse sous entendre bcp :)

signaler à un administrateur
Commentaire de NHenry le 02/09/2004 16:41:02

Oui en effet, ya pas MSDN en ligne ?

signaler à un administrateur
Commentaire de NHenry le 07/09/2004 15:04:55

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.

signaler à un administrateur
Commentaire de azerty25 le 08/09/2004 14:44:53

Merci bien, donc vous pouvez remplacer cancel par 0,1,2,3,4,5 pour les éventuel débutants ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.