Page 1 sur 2
[resolu] EventType() et bouton souris
Publié : jeu. 02/déc./2010 18:26
par Ar-S
Je me remets un peu à PB et je me pine sur les eventtype()
pourquoi cet eventtype() ne réagit pas ?
Code : Tout sélectionner
Enumeration
#LDV
#ADD
EndEnumeration
Global adr$
adr$="http://google.fr"
If OpenWindow(#LDV, 450, 200, 613, 488, "WEB LINK SNIFFER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(#ADD, 5, 5, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ADD
Select EventType()
Case #PB_EventType_LeftClick
Debug "clic"
SetGadgetText(#ADD,"http://")
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDV
CloseWindow(#LDV)
Break
EndSelect
EndSelect
ForEver
EndIf
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 18:38
par zaphod
...
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 18:48
par Ar-S
certes mais pourquoi mon #PB_EventType_LeftClick ne fonctionne pas ?
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 19:31
par boddhi
PureBasic a écrit :Les évènements suivants sont disponibles par l'intermédiaire d'EventType():
#PB_EventType_Change : Le texte a été modifié par l'utilisateur.
#PB_EventType_Focus : Le StringGadget obtient le focus.
#PB_EventType_LostFocus : Le StringGadget a perdu le focus.
Tu seras probablement obligé de passer par un callback pour détecter un évènement de type LeftClick...
Je vais rechercher la constante windows...
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 19:45
par boddhi
Une première approche (mais l'évènement n'est pas détecté lors de la prise de focus...)
Code : Tout sélectionner
Enumeration
#LDV
#ADD
#ADD2
EndEnumeration
Global adr$
adr$="http://google.fr"
If OpenWindow(#LDV, 450, 200, 613, 488, "WEB LINK SNIFFER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(#ADD, 5, 5, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
StringGadget(#ADD2, 5, 40, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
Repeat
Select WaitWindowEvent()
Case #WM_LBUTTONDOWN
Select GetActiveGadget()
Case #ADD
Debug "Click"
SetGadgetText(#ADD,"http://")
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #ADD
Select EventType()
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDV
CloseWindow(#LDV)
Break
EndSelect
EndSelect
ForEver
EndIf
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 19:54
par boddhi
Seconde approche qui me semble plus cohérente qu'avec le LeftClick pcq, imaginons que tu aies déjà tapé quelque chose dans le SringGadget, si tu souhaites te déplacer de nouveau dedans à l'aide de la souris, le contenu se réinitialisera automatiquement alors qu'avec le focus, cela ne se produira uniquement que lorsque tu (sortiras et) entreras de nouveau dans le StringGadget :
Code : Tout sélectionner
Enumeration
#LDV
#ADD
#ADD2
EndEnumeration
Global adr$
adr$="http://google.fr"
Procedure.i Fc_CallBack(ArgFenetre,ArgMessage,ArgWParam,ArgLParam)
Define.i ValeurRetour,Evenmt,Gadget
ValeurRetour=#PB_ProcessPureBasicEvents
Select ArgMessage
Case #WM_COMMAND
Evenmt=ArgWParam>>16
Gadget=ArgWParam&$FFFF
Select Gadget
Case #ADD
Select Evenmt
Case #EN_SETFOCUS
SetGadgetText(#ADD,"http://")
;Case #EN_KILLFOCUS
;Case #EN_UPDATE
EndSelect
EndSelect
EndSelect
ProcedureReturn ValeurRetour
EndProcedure
If OpenWindow(#LDV, 450, 200, 613, 488, "WEB LINK SNIFFER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(#ADD, 5, 5, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
StringGadget(#ADD2, 5, 40, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
SetWindowCallback(@Fc_CallBack(),#LDV)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ADD
Select EventType()
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDV
CloseWindow(#LDV)
Break
EndSelect
EndSelect
ForEver
EndIf
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 20:41
par Ar-S
Merci boddhi, c'est intéressant même si je trouve cela étrange de devoir ajouter un callback a des fonctions censées être natives.
A terme c'est pour détecter des mouvements de pages web et les url.
Re: Rafraichissement sur EventType()
Publié : jeu. 02/déc./2010 20:50
par boddhi
Ar-S a écrit :Merci boddhi, c'est intéressant même si je trouve cela étrange de devoir ajouter un callback a des fonctions censées être natives.
Le "souci" est bien là, c'est que ce type d'évènement pour ce type de gadget n'est pas natif en PB...
Pourquoi ??? Franchement, je suis bien incapable de le dire
Ar-S a écrit :A terme c'est pour détecter des mouvements de pages web et les url.
"WEB LINK SNIFFER"
On s'en serait pas douté

Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 0:00
par Ar-S
boddhi a écrit :
Ar-S a écrit :A terme c'est pour détecter des mouvements de pages web et les url.
"WEB LINK SNIFFER"
On s'en serait pas douté

héhé

Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 9:19
par MLD
boddhi a écrit :Le "souci" est bien là, c'est que ce type d'évènement pour ce type de gadget n'est pas natif en PB...
Il est rare dans un stringGadget d'avoir a éxécuter une action a partir d'un clic de souris. Par contre tu peux faire une action a partir du clavier par un menu bidon,avec AddKeyboardShortcut .
Code : Tout sélectionner
AddKeyboardShortcut(#fen, #PB_Shortcut_Return, 0) ; menu bidon pour traitement du clavier dans les stringGadgjet
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Menu
Select EventMenu();pour ok dans les string
Case 0
;ton code
endselect
endif
ect...
Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 12:14
par kernadec
bonjour
merci, boddhi pour l'option callback ça va m'aider pour deux trois truc ou je savais plus quoi faire
mais l'idée de zaphod est la bonne , merci!
Cordialement
Code : Tout sélectionner
Enumeration
#LDV
#ADD
EndEnumeration
Global adr$
adr$="http://google.fr"
If OpenWindow(#LDV, 450, 200, 613, 488, "WEB LINK SNIFFER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
StringGadget(#ADD, 5, 5, 600, 25, adr$, #PB_String_LowerCase|#WS_BORDER)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #ADD
Select EventType()
Case #PB_EventType_Focus
Debug "clic"
SetGadgetText(#ADD,"http://")
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDV
CloseWindow(#LDV)
Break
EndSelect
EndSelect
ForEver
EndIf
Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 12:32
par boddhi
kernadec a écrit :mais l'idée de zaphod est la bonne

Mais diable pourquoi faire simple quand on peut faire compliqué !!!
C'est vrai, #Pb_Event_Focus est plus simple et présente l'avantage d'être multiOS.
Je l'ai oublié quand j'ai posté ce code, tellement l'habitude d'utiliser cette procédure...
Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 12:38
par Backup
....;...............
Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 16:51
par Backup
note qu'au lieu d'utiliser un bouton pour remettre en etat le flag
j'aurions pu aussi utiliser l'appuis sur une touche précise (entrée par ex

)
Re: Rafraichissement sur EventType()
Publié : ven. 03/déc./2010 18:49
par GeBonet
Salut,
@Ar-s Voilà un condensé de code glané un peu partout...
DON la forme d'utilisation d'"
Eventype()..."
Et leurs utilisation, et détection des "Click",
Si ça peu servir...
Code : Tout sélectionner
; **********************************************************
; Detecte les Click / Mouvements et Roulette souris
; **********************************************************
;
Enumeration
#Window_0
EndEnumeration
#WM_MOUSEWHEEL = $20A
#WHEEL_DELTA = 120
;
If OpenWindow(#Window_0, 0, 0, 425, 350, "Exemple", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Texte1$="ou là : "
Texte0$="ICI : "
PanelGadget(0, 10, 10, 400, 300)
AddGadgetItem(0, 0, "onglet 1")
AddGadgetItem(0, 1, "onglet 2")
TextGadget(11,10,10,50,20,Texte0$)
PanelGadget(1, 10, 30, 400, 300)
AddGadgetItem(1, 0, "onglet 11")
AddGadgetItem(1, 1, "onglet 12")
TextGadget(10,10,20,50,20,Texte1$)
CloseGadgetList()
EndIf
;{- Event loop
; ******************************************** Debut de la boucle ************************************
Repeat
; Debug "**********************************deb_boucle **************************************** " + f_n(mclickd) + " " + f_n(meg)
chaine$ = ""
;WE = WindowEvent(); ne pas mettre cette fonction en service sous risque de dysfonctionnement
WWE = WaitWindowEvent()
Fenetre = EventWindow()
EG = EventGadget()
ET = EventType()
EM = EventMenu()
EWP = EventwParam()
ELP = EventlParam()
;******************************************************************************************
Select WWE
Case #PB_Event_CloseWindow
End
Case #WM_LBUTTONDOWN ;"Bouton gauche appuyé")
Debug "Clic avec le bouton gauche de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
Case #WM_RBUTTONDOWN ;"Bouton droit appuyé")
Debug "Clic avec le bouton droit de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
Case #WM_LBUTTONUP ;"Bouton gauche relaché")
Case #WM_RBUTTONUP ;"Bouton droit relaché")
Case #WM_MBUTTONDOWN ;"Bouton du milieu appuyé"
Case #WM_MBUTTONUP ;"Bouton du milieu relaché")
Case #WM_LBUTTONDBLCLK ;"Double clic gauche")
Debug "Double-clic avec le bouton gauche de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
Case #WM_RBUTTONDBLCLK ;"Double clic droit")
Debug "Double-clic avec le bouton droit de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
Case #WM_MBUTTONDBLCLK ;"Double clic du milieu")
Debug "Double-clic avec la roulette du Milieu de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
Case #WM_MOUSEWHEEL
Molette.l = -(EWP>>16)/#WHEEL_DELTA
If Molette>0 ;"Molette en avant de
Debug "Molette Arrière de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
ElseIf Molette<0 ;"Molette en arrière de
Debug "Molette avant de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG))
EndIf
Case #WM_MOUSEMOVE
;Debug "Déplacement de la souris Gadget="+Str(EG)+" etat="+Str(GetGadgetState(EG)); OK
Case #PB_Event_Gadget
Select ET
Case #PB_EventType_LeftClick ;"Image : Bouton gauche appuyé"
Case #PB_EventType_LeftDoubleClick ;"Image : Double clic gauche")
Case #PB_EventType_RightClick ;"Image : Bouton Droit appuyé"
Case #PB_EventType_RightDoubleClick ;"Image : Double clic droit")
EndSelect
Debug "EvenType : "+Str(ET)
Case #PB_Event_Repaint
StartDrawing(WindowOutput(#Window_0))
;DrawImage(ImageID(Frame3D_5), 792, 97)
;DrawImage(ImageID(1), 320, 80)
;DrawImage(ImageID(2), 320, 200)
StopDrawing()
Case #WM_CHAR
Car=EventwParam()
If Car<>8 Or Car<>13 Or Car<>27
Debug "#CHAR: " + Str(Car)+" "+Chr(Car)
Texte0$="ou là : "+Chr(Car)
SetGadgetText(10,Texte0$)
Else
Debug "#CHAR: " + Str(Car)
EndIf
Case #WM_KEYDOWN
Debug "#KEYDOWN: " + Str(EventwParam())
Case #WM_KEYUP
Debug "#KEYUP: " + Str(EventwParam())
Case #WM_DEADCHAR
Debug "#DEADCHAR: " + Str(EventwParam())
Case #WM_SYSCHAR
Debug "#SYSCHAR: " + Str(EventwParam())
Case #WM_SYSKEYDOWN
Debug "#SYSKEYDOWN: " + Str(EventwParam())
Case #WM_SYSKEYUP
Debug "#SYSKEYUP: " + Str(EventwParam())
EndSelect
; *************************************** fin de la boucle *****************************************
; Until WE = #PB_Event_CloseWindow Or WWE = #PB_Event_CloseWindow
ForEver
;******************************* fin du PRG *************************************************
End