begin process at 2008 07 04 23:33:26
1 204 994 membres
509 nouveaux aujourd'hui
14 118 membres club

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 : 3 849

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

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS