PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 13:45
umm.
ok, donc j'en déduit que cette fonction est dans une classe ou un module
...
çà va te paraître stupide, mais comme je n'ai que çà sous les yeux :
dans ton Else de &HBFFE&
(apparté : &HBFFE& = 49150, ok, mais je ne sais pas à quelle constante çà correspond...)
tu ne devrais pas mettre bCancel = False??
pourquoi continuer d'intercepter les message d'état fenêtre...
enfin, je vois que çà avec ton post
et également, en général, mais je ne suis que débutant dans ces procédures, après ce genre de fonctions, il faut un CallBack pour donner la suite du message (en l'occurrence, après le Loop)
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 14:37
pour ton second lien, je n'ai que la page d'accueil...
bon, l'idée est la suivante :
ta form se charge
tu ne mets pas le focus sur ta sstab (j'ai testé avec un txtbox)
quand tu changes d'onglet, soit tu click, soit tu tabules pour aller sur le sstab
donc tu auras les évènements KeyDown, KeyPress, MouseDown, MouseClick (ceux qui nous importent)
au "Down", tu passes ton Booléen à True, et tu arrêtes la procédure, et au Click et KeyPress, tu le repasses à False + procédure.
le problème est que le Hwnd n'est plus accessible, et donc le VbKeyF n'est plus utilisable (la procédure complète en fait). à ce moment, tu dois passer par un module, pour créer une sorte d'identifiant unique, pour qu'au même hWnd, à 2 utilisations différentes, 2ID soient générés...
je sais pas si c'est clair...
voilà, t'as le principe et çà fonctionne. pour l'ID, regarde ma source AfTimer, tu y verras peut-être plus clair
Seth77
Messages postés572Date d'inscriptionmardi 30 avril 2002StatutMembreDernière intervention 4 mai 20201 30 juil. 2005 à 14:50
Le prob c que je n accede meme pas a l evenement clic du SSTab
voici mon code test : 1 form + un SSTab !
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type msg
hwnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As
Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As
Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA"
(lpMsg As msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal
wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private bCancel As Boolean
Private Sub Form_Load()
ret = RegisterHotKey(Me.hwnd, &HBFFA&, MOD_CONTROL + MOD_SHIFT, vbKeyA)
bCancel = False
Show
ProcessMessages
End Sub
Private Sub ProcessMessages()
Dim Message As msg
Do While Not bCancel 'répéter tant que bCancel ne vaut pas True
WaitMessage 'en attente de message
'vérifie si c'est un HOTKEY-message
If PeekMessage(Message, Me.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 15:29
ok, peut-être me suis-je mal expliqué :
en supposant ton sstab nommé SSTab1
copie çà dans ton code :
Private Sub SSTab1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print "MouseDown"
End Sub
Private Sub SSTab1_Click(PreviousTab As Integer)
Debug.Print "MouseClick"
End Sub
quand tu click sur un onglet, l'évènement MouseDown est reçu.
la procédure HotKey empêche le MouseClick qui aurait du venir après le MouseUp
donc à la réception du MouseDown, tu arrêtes la procédure HotKey.
le MouseUp est ensuite reçu, puis le Click
le Click quant à lui, change ton onglet, et dans cet évènement, tu relances la procédure de HotKey
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 16:09
déclarations :
Dim SSTabException As Boolean
processMessages
Do While ((Not bCancel) And (Not SSTabException))
evenements
Private Sub SSTab1_Click(PreviousTab As Integer)
SSTabException = False
Debug.Print "Click = SStab FALSE"
Call ProcessMessages 'le process message est un WHILE. donc à partir du moment ou on l'aura passé le Booleen SSTabException à TRUE, la procédure s'arrêtera...
End Sub
Private Sub SSTab1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
SSTabException = True
Debug.Print "Down = SStab TRUE"
End Sub
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 16:49
faut te suivre....fait moi plaisir, déclare WM_LBUTTONDOWN &H201 ' 513
çà sera plus facile pour les lecteurs
avec ton code en plus, chez moi, çà marche une fois sur 5, des fois le click droit, des fois le gauche, et quand ensuite, je presse Ctrl + Shift + A, "Erreur : un objet est requis"
Seth77
Messages postés572Date d'inscriptionmardi 30 avril 2002StatutMembreDernière intervention 4 mai 20201 30 juil. 2005 à 19:39
ok
mais ou tu as trouve la valeur de WM_LBUTTONDOWN ???
dans l aide ils parlent de PM_QS_INPUT .... je n ai pas trouve la valeur de la variable !!! dans l aide il n y a rien
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 30 juil. 2005 à 19:51
pour avoir le nom des constantes, (VB6 pro), tu as "visionneuse d'API" qui contient déjà pas mal de constantes.
ensuite, tu peux en trouver encore sur www.Progotop.com et sur www.Allapi.net
tu peux également lancer Spy++, fourni avec VB6 pro toujours, et intercepter les messages. presques toutes les constantes (voire toutes) y sont. il te reste ensuite à lire la valeur en long, et soit l'enregistrer en constante, doit la convertir en hexa et enregistrer.
rassure toi, cette technique barbare n'est pas si souvent utile, énormément de constantes sont accessibles. il faut juste beaucoup chercher ;)
bon, bah si ma méthode fonctionne, content de t'avoir aidé ;)
reste plus qu'à valider
(dispo si besoin)