CLICK SUR MINIMIZE (SUBCLASSING)

Résolu
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 - 28 juin 2006 à 14:04
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 - 29 juin 2006 à 16:47
Bonjour,

J'aimerai savoir comment mon application peut être avertie d'un clic sur le bouton minimize.

Je pense tout particulièrement au SubClassing. Mais je ne sais pas quel message écouté.
En effet, j'aimerai savoir lorsqu'un utilisateur clic sur Minimize et pouvoir agir ainsi à ma façon.

Merci d'avance
Bonne prog ++

PS : Je ne souhaite pas de Timer qui controlera le MaForm.WindowState !!!

13 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 juin 2006 à 17:56
utilises SPY++, pour visualiser les messages qui parviennent a ta fenetre.
dans le lot, tu en verra un, en particulier, qui est déclenché par le bouton Minimize...

c'est : WM_SYSCOMMAND  (avec SC_MINIMIZE en parametre)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
28 juin 2006 à 14:08
Salut,

essaie d'adapter la source de PCPT pour tes besoins :
http://www.vbfrance.com/codes/MODIFIER-ETAT-BOUTONS-REDUIRE-AGRANDIR-FERMER-MODULE-CLASSE_37556.aspx

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
28 juin 2006 à 15:35
Salut,

Ou, tout simplement dans l'évènement Resize de la form un code du genre :

Private Sub Form_Resize()
   If Me.WindowState = vbMinimized Then
     MsgBox "Au secours ! On me rapetisse."
   End If
End Sub
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
28 juin 2006 à 17:25
Mortalino>>La source de PCPT, bien que très bonne ne répond pas à mes besoins. En effet, il permet de bloquer le bouton Minimize (et autres) mais ne permet pas de récuperer un clic sur ce bouton.

Dolphin Boy>>Oui, effectivement, j'avais pensé à cette solution. Mais, le problème est que Form_Resize est appelé APRES que la Form n'est été réduite. Et l'on voit ainsi la petite animation de la fenetre qui se réduit vers la barre de tache. Ce que je souhaite éviter.

Je pense vraiment que le SubClassing est la meilleur solution, mais je ne sais pas quel message je doit intercepter.

Bonne prog ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
28 juin 2006 à 18:02
SPY++   Connais pô
Je vais essayer de jetter un oeil ce soir à la maison. Si tu as un lien avec quelques infos je suis preneur.

Merci
Bonne prog ++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 juin 2006 à 18:39
c'est un outil qui est livré avec Visual Studio...
j'ai pas de lien sous la main, mais mon ami google doit pouvoir trouver ça

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
28 juin 2006 à 22:13
Ok, j'ai trouvé. C'est vraiment génial ce truc !!!
J'utilise ta DLL pour SubClasser facilement ^^
Je filtre donc bien les messages voulus. Et je bloque le message.

Voici mon code. Peux-tu me dire s'il te semble correct ?

    Select Case uMsg
            Case WM_SYSCOMMAND
                    Select Case wParam
                            Case SC_MINIMIZE
                                    'Mon code de traitement
                                    MsgBehavior = [MB Cancel Message]
                    End Select
    End Select

Merci encore
Bonne prog ++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 juin 2006 à 22:23
salut,
c'est quoi le but? c'est-à-dire.. que veux-tu faire du message?
juste savoir (pour renvoyer l'évènement), alors c'est bien au resize (tester le windowstate=vbminimized).
sinon, genre pouvoir l'annuler, regarde ma source (focus par subclassing).

regarde du côté de
Private Const WM_WINDOWPOSCHANGED = &H47
Private Const WM_WINDOWPOSCHANGING = &H46
ou aussi HT_MINBUTTON

++
PCPT   [AFCK]

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
29 juin 2006 à 08:03
PCPT>>En fait mon but était de pouvoir :

1°-Intercepter le message qui dit à la from "fait toi toute petite" ^^
2°-Annuler ce message
3°-Appliquer mon propre code de traitement

Sachant que je ne dispose que du handle de la fenetre, car le code se trouve dans un control utilisateur destiné à devenir OCX. (code que je posterai bientôt).

Je pense donc que le bout de code que j'ai mis 2 messages plus haut doit faire l'affaire.

Merci à tous pour votre aide.

Bonne prog ++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 juin 2006 à 08:44
J'ignore pourquoi ton code ne fonctionne pas...


Private WithEvents Subclasser As ReySubClasser

Private Const SC_MINIMIZE As Long = &HF020&


Private Sub Form_Load()

    Set Subclasser = New ReySubClasser

    Subclasser.Controls.Add Me.hwnd

    Subclasser.StartSubClassing

End Sub


Private Sub Subclasser_Msg1(ByVal hwnd As Long, ByVal uMsg As
Rey_SubClasser.MessageConstants, ByVal wParam As Long, ByVal lParam As
Long, MsgBehavior As Rey_SubClasser.MsgBehaviorConstants, RetValue As
Long, ByVal OldProc As Long)

    If uMsg WM_SYSCOMMAND And wParam SC_MINIMIZE Then

        MsgBehavior = [MB Cancel Message]

    End If

End Sub

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
29 juin 2006 à 09:09
Si si, j'ai peut etre pas été clair mais il fonctionne très bien

Je voulais juste ton avis sur ce code !

Bonne prog ++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 juin 2006 à 09:46
Ah oui, effectivement ^^ j'avais mal lu :p

mon avis sur ma dll est connu, je pense...
c'est une dll qui aide lors de la conception et du debuggage. Bien que pouvant être fournie avec les versions compilées, je ne l'encourage pas... un fichier en plus, et un final plus lent/lourd que ne le serait une version codée directe dans le projet.

l'interet de cette dll est de palier aux plantages et instabilités de l'IDE de VB, et de permettre de concevoir rapidement le SubClassing.

Enfin, pour la suite, je te laisse voir ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
29 juin 2006 à 16:47
Bon, merci à tous pour votre aide.
Voici le lien de la source que je viens de déposer. C'est pour cette source que j'avais posé la question.

http://www.vbfrance.com/codes/CONTROL-SYSTRAY-OUI-ENCORE-MAIS-ASSEZ-COMPLET_38365.aspx

Merci encore
Bonne prog ++
0
Rejoignez-nous