PureBasic
https://www.purebasic.fr/french/

[RESOLU] Click sur TextGadget
https://www.purebasic.fr/french/viewtopic.php?f=1&t=17261
Page 1 sur 1

Auteur:  omega [ Dim 06/Mai/2018 13:29 ]
Sujet du message:  [RESOLU] Click sur TextGadget

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

Auteur:  Marc56 [ Dim 06/Mai/2018 13:49 ]
Sujet du message:  Re: Evènement clic sur textgadget

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.

Auteur:  falsam [ Dim 06/Mai/2018 13:54 ]
Sujet du message:  Re: Evènement clic sur textgadget

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:
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

Auteur:  microdevweb [ Dim 06/Mai/2018 14:26 ]
Sujet du message:  Re: Evènement clic sur textgadget

Une autre solution est d'utiliser un canvas comme container, tous les traitements événementiels sont alors possible.

Code:
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


Auteur:  omega [ Dim 06/Mai/2018 23:27 ]
Sujet du message:  Re: Evènement clic sur textgadget

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

Auteur:  Marc56 [ Lun 07/Mai/2018 7:34 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

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.

Auteur:  MLD [ Lun 07/Mai/2018 9:01 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

regarde avec ceci

Code:
#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


Auteur:  falsam [ Lun 07/Mai/2018 9:41 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

@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.

Auteur:  venom [ Lun 07/Mai/2018 9:56 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

Ou sans APi avec la fonction HyperLinkGadget

Code:
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:






@++

Auteur:  mestnyi [ Mar 08/Mai/2018 21:39 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

http://www.purebasic.fr/english/viewtopic.php?f=12&t=70664&p=521916#p521892
ou utilisez ce module prêt à l'emploi. :)

Auteur:  GallyHC [ Mar 08/Mai/2018 23:07 ]
Sujet du message:  Re: [RESOLU] Click sur TextGadget

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:
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

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/