Page 1 sur 1

[RESOLU] Click sur TextGadget

Publié : dim. 06/mai/2018 13:29
par omega
Bonjour,

Après plusieurs tentatives, je n'ai pas réussi finalement à détecter UN CLIC sur un TextGadget. J'ai créé un menu formé par des textGadget qui changent de couleur au passage de la souris, mais quand on clique sur un menu (textGadget) rien ne se passe. Comment savoir si on a cliqué sur une zône texte? J'ai essayé d'utiliser #PB_EventType_LeftClick mais sans résultat.

Merci

Re: Evènement clic sur textgadget

Publié : dim. 06/mai/2018 13:49
par Marc56
Le TextGadget n'est pas un gadget interactif, c'est juste un étiquette.
Le plus simple est d'utiliser des ImageGadgets dont on créé l'image "texte" dynamiquement. (Startdrawing/DrawText/StopDrawing)
L'imageGadget supporte en plus le clic simple, double, gauche, droit.

Re: Evènement clic sur textgadget

Publié : dim. 06/mai/2018 13:54
par falsam
un minimum de code aurait été bien.

Comme l'a dit Marc, TextGadget() n'a pas d'évenement natif.

Par contre tu peux utiliser la constance API #SS_NOTIFY

Code : Tout sélectionner

OpenWindow(0, 0, 0, 800, 600,"Event TextGadget()")

TextGadget(0, 20, 20, 100, 22, "Item de menu", #SS_NOTIFY)

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case 0
        Debug "click"
    EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow

Re: Evènement clic sur textgadget

Publié : dim. 06/mai/2018 14:26
par microdevweb
Une autre solution est d'utiliser un canvas comme container, tous les traitements événementiels sont alors possible.

Code : Tout sélectionner

Enumeration 
  #mainForm
  #txtGadget
  #canvasGadget
EndEnumeration

Procedure exit()
  CloseWindow(#mainForm)
  End
EndProcedure

Procedure _eventText()
  Select EventType()
    Case #PB_EventType_MouseEnter
      Debug "sourris sur le texte"
    Case #PB_EventType_LeftClick
      Debug "click sur le texte"
  EndSelect
EndProcedure

OpenWindow(#mainForm,0,0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
; le canvas qui va servir de container
CanvasGadget(#canvasGadget,350,300,100,30,#PB_Canvas_Container)
TextGadget(#txtGadget,0,0,100,30,"Hello")
CloseGadgetList()

BindEvent(#PB_Event_CloseWindow,@exit(),#mainForm)
BindGadgetEvent(#canvasGadget,@_eventText())

Repeat:WaitWindowEvent():ForEver


Re: Evènement clic sur textgadget

Publié : dim. 06/mai/2018 23:27
par omega
Merci à vous tous !

La solution de Falsam marche bien, en attendant de tester celle du Canevas, je réitère mes sincères remerciements.

Bonne continuation

Re: [RESOLU] Click sur TextGadget

Publié : lun. 07/mai/2018 7:34
par Marc56
Il faut cependant se méfier, car si un paramètre d'une fonction n'est pas dans la doc officielle, cela veut dire que cela ne fonctionnera peut être plus dans la version suivante de PB :!: ... donc tu peux avoir à refaire une grande partie de ton programme ou être obligé de rester à une certaine version de PB.

:idea: Pour assurer la pérennité d'une application, rester au maximum dans le jeu de fonctions proposé par le développeur.

Re: [RESOLU] Click sur TextGadget

Publié : lun. 07/mai/2018 9:01
par MLD
regarde avec ceci

Code : Tout sélectionner

#Fenetre = 0 
#TexteGadget0 = 0 

OpenWindow(#Fenetre, 0, 0, 270, 160, "TextGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 

TextGadget(#TexteGadget0, 10, 10, 250, 20, "Gadget texte standard (texte aligné à gauche)", #SS_NOTIFY) 
; #SS_NOTIFY detecte uniquement un clic avec le bouton gauche de la souris      
Repeat 
  
 Evenement = WaitWindowEvent() 
  
 Select Evenement 

  Case #PB_Event_Gadget  
   If EventGadget() = #TexteGadget0 
    Debug "#TexteGadget0 cliqué" 
   EndIf 
 EndSelect 

Until Evenement = #PB_Event_CloseWindow 


Re: [RESOLU] Click sur TextGadget

Publié : lun. 07/mai/2018 9:41
par falsam
@MLD : Commenter quand le sujet est résolu pourquoi pas si ça apporte quelques chose de plus. Mais là ce n'est pas le cas car c'est la solution que j'ai donné plus haut et qu'Omega a validée.

Re: [RESOLU] Click sur TextGadget

Publié : lun. 07/mai/2018 9:56
par venom
Ou sans APi avec la fonction HyperLinkGadget

Code : Tout sélectionner

If OpenWindow(0,0,0,270,160,"HyperLinkGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    HyperLinkGadget(8, 10, 10,250,20,"Lien rouge", RGB(255,0,0))
    SetGadgetFont(1, LoadFont(8, "Arial", 12))
    
  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
          
        Case 8
          Debug "clic"

      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
  
EndIf
Bien évidement tout dépend si ça colle avec ton interface. :wink:






@++

Re: [RESOLU] Click sur TextGadget

Publié : mar. 08/mai/2018 21:39
par mestnyi
http://www.purebasic.fr/english/viewtop ... 16#p521892
ou utilisez ce module prêt à l'emploi. :)

Re: [RESOLU] Click sur TextGadget

Publié : mar. 08/mai/2018 23:07
par GallyHC
Bonjour,

Avec le code de "Falsam", et donc avec l'utilisation de "#SS_NOTIFY" en option, il y a un comportement un peu étrange au double-clic gauche. Reprenez le code de "Falsam" (je met en dessous).

Code : Tout sélectionner

OpenWindow(0, 0, 0, 800, 600,"Event TextGadget()")

TextGadget(0, 20, 20, 100, 22, "Item de menu", #SS_NOTIFY)

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case 0
        Debug "click"
    EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow
Executer le code comme normal et faites un double clique gauche de la souris. Allez dans n'importe qu'elle éditeur de texte (notepad, notepad++, ...) et faites un coller, si c'est comme moi le texte du textgadget à été placer dans le clipboard.

Cordialement,
GallyHC