[RESOLU] Click sur TextGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Click sur TextGadget

Message 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
Dernière modification par omega le dim. 06/mai/2018 23:29, modifié 2 fois.
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Evènement clic sur textgadget

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Evènement clic sur textgadget

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Evènement clic sur textgadget

Message 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

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
omega
Messages : 617
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Evènement clic sur textgadget

Message 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
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: [RESOLU] Click sur TextGadget

Message 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.
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: [RESOLU] Click sur TextGadget

Message 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 

Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [RESOLU] Click sur TextGadget

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: [RESOLU] Click sur TextGadget

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






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
mestnyi
Messages : 4
Inscription : dim. 09/mars/2014 21:30

Re: [RESOLU] Click sur TextGadget

Message par mestnyi »

http://www.purebasic.fr/english/viewtop ... 16#p521892
ou utilisez ce module prêt à l'emploi. :)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: [RESOLU] Click sur TextGadget

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre