Probleme SSTab

Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 - 28 juil. 2005 à 16:13
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 30 juil. 2005 à 19:51
Slu



j essaie d utiliser un SSTab malheureusement j utilise egalement des Hotkey....

quand les Hotkey sont actifs je ne peux plus passer d un onglet a l autre dans mon sstab !!



Qqn a une soluce ?

Herve

16 réponses

Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
29 juil. 2005 à 16:23
up



help !!

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 01:33
personne n a de soluce?

Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
30 juil. 2005 à 12:27
je n'utilise pas les HotKey, tu peux donner un exemple ou un bout de code pour que je puisse me mettre dans le contexte stp?
PCPT
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 12:36
Voici la fonction qui "apparement" bloque l utilisation du SSTab



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


Select Case
Message.wParam


Case Is = &HBFFE&


If (FRM_Main.WindowState = vbNormal) Then


FRM_Main.WindowState = vbMinimized


FRM_Main.Visible = False

Else


FRM_Main.WindowState = vbNormal


FRM_Main.Visible = True


FRM_Main.SetFocus

End If

Case Is = &HBFFD&

Me.Hide

CheckDB


Me.Visible = True

End Select

End If

'laisse les progs travailler

DoEvents

Loop

End Sub


Herve
0

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

Posez votre question
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 14:02
j ai recupere le code ici :



http://www.vbfrance.com/code.aspx?id=2594



et j ai fais un exemple avec un SStab :



http://www.megaupload.com/?d=37GEB2EV


Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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

PCPT
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
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

Select Case Message.wParam

Case Is = &HBFFA&


Form1.Caption = "HOTKEY " & Now

End Select

End If

'laisse les progs travailler

DoEvents

Loop

End Sub



Private Sub Form_Unload(Cancel As Integer)

bCancel = True

Call UnregisterHotKey(Me.hwnd, &HBFFA&)

End Sub












Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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

c'est plus clair?
PCPT
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 15:38
oui ca marche pour le prob du sstab mais etranger maintenant plus moyen de quitter l app ...il ne rentre plus dans Form_Unload

Herve
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 15:43
n y a t il pas moyen de recupere, dans la boucle "Do While Not bCancel " le Clic du sstab et de le renvoyer sur le sstab ?

Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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

il reste toujours le souci pour UnLoad....
PCPT
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
30 juil. 2005 à 16:31
j ai essaye cela :



If PeekMessage(Message,
Me.hwnd, 513, 513, PM_REMOVE) Then 'capture du
clic


SSTab1.Tab = 2

SSTab1.SetFocus

End If



mais ca ne marche pas ....le sstab a l affichage reste sur le tab 0 ...mais la valeur est bien tab = 2 !

Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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"

t'as essayé ce que j'ai mis avant?
PCPT
0
Seth77 Messages postés 572 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 4 mai 2020 1
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



oui ca marche ce que tu avais mis.


Herve
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
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)

PCPT
0