begin process at 2010 03 22 15:40:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaire

 > TECHNIQUES POUR EMPECHER LE DÉCHARGEMENT DE LA FEUILLE

TECHNIQUES POUR EMPECHER LE DÉCHARGEMENT DE LA FEUILLE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : azerty25

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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



 Sources du même auteur

Source avec Zip SAVOIR SI UN OBJET EST CACHÉ PAR UN AUTRE(FENÊTRES, CONTROLE...
Source avec Zip WINDOWSMOVE(R) - DÉPLACER DES FENÊTRES (HANDLES) QUI NE SONT...
SAVOIR SI UNE FENETRE EST AU PREMIER PLAN PERMANENT
EXTRAIRE LE RÉPERTOIRE D'UN FICHIER, SON EXTENSION, SON NOM,...
Source avec Zip Source avec une capture TOPMOST M@N@G(R) - METTRE UNE FENETRE AU PREMIER PLAN PERMAN...

 Sources de la même categorie

Source avec Zip Source avec une capture RÉPERTOIRE TÉLÉPHONE SIMPLE VB2008 EXPRESS EN LIEN AVEC FICH... par stef68600
Source avec Zip Source avec une capture Source .NET (Dotnet) EDITEUR DE TEXTE WINFORM AVEC CORRECTEUR ORTHOGRAPHIQUE WPF par gillardg
Source avec Zip Source .NET (Dotnet) MODIFIER L'OPACITÉ D'UN FORMULAIRE AU PASSAGE DE LA SOURIS par Arnal88
Source avec Zip Source avec une capture LOGICIEL BONS DE TRAVAUX par gnieark
Source avec Zip Source avec une capture Source .NET (Dotnet) AFFICHER UNE IMAGE DANS UNE CELLULE D'UN DATAGRIDVIEW LIÉ À ... par christcnet

Commentaires et avis

Commentaire de BigBadboy le 14/08/2004 10:15:21

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

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

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.

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.

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.

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?

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 :)

Commentaire de NHenry le 02/09/2004 16:41:02

Oui en effet, ya pas MSDN en ligne ?

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.

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


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales