Problème gestion évènement d'un buttongadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Problème gestion évènement d'un buttongadget

Message par jmg49 »

Bonjour,

j'ai bricolé un petit outil réseau qui affiche ip WAN, LAN , nom du poste ; il doit y en avoir déjà des centaines comme ça , c'est pour mon usage personnel,
c'est pour travailler la gestion des évènements dans les forms, étant habitué aux frameworks de dev où il suffit de cliquer dans le gadget edit pour que la fonction se créée auto dans le code, je voulais voir ce que ça peut donner en PB,

Je rencontre un problème très simple (grrrrr ! ) j'ai sur un buttongadget en txt l'url du site web pour récupérer l'ip WAN, je ne connais pas d'autres possibilité que de parser dans une page web ;

Pour l'ip Lan, je pensais taper dans l'API windows ou le registre, enfin plein de solutions pour ça mais oh surprise il existe ExamineIPAddresses() et NextIPAddress() !! on va donc pas réinventer la roue,

pour le WAN
quand je clique sur le bouton, je veux que l'url change, de http://www.monip.fr à http://www.monip.org par ex,
j'arrive à le faire changer mais sur 5 possibilités mon prog reste bloqué sur le deuxième choix,

je poste mon code, si vous pouvez m'éclairer !! je vous en remercie d'avance,

Code : Tout sélectionner

;PureBasic 
;Basic Net tool 
;JmG49@2014





Enumeration 0 ; Id. Fenêtres
  #FENETRE1
EndEnumeration

Enumeration 0 ; Id. Gadgets
   #FEN1_GETIP
   #FEN1_QUIT 
   #FEN1_SITE
   #FEN1_edit1
   #FEN1_edit2
   #FEN1_edit3
   #FEN1_edit4
EndEnumeration
 

InitNetwork()


Global Buffer.s

site0.s ="www.monip.org"
site1.s ="www.monip.fr"
site2.s ="www.monip.eu"
site3.s ="www.frameip.com"
site4.s ="www.hostip.fr"

 
If OpenWindow(#FENETRE1, 320, 200, 570, 150, "PureBasic - Network Utility: IP Adresses (JmG@2014)", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   
   
      ButtonGadget(#FEN1_GETIP, 200, 10, 130, 20, "Get Ip")
      ButtonGadget(#FEN1_QUIT, 350, 10, 70, 20, "Quit")
      ButtonGadget(#FEN1_SITE, 10, 10, 170, 20, site0.s)
      EditorGadget(#FEN1_edit1, 120, 40, 150, 20)
      EditorGadget(#FEN1_edit2, 300, 40, 160, 20)
      EditorGadget(#FEN1_edit3, 120, 80, 150, 20)
      EditorGadget(#FEN1_edit4, 300, 80, 160, 20)
      TextGadget(#PB_Any, 0, 40, 100, 20, "  Local IP Address")
      TextGadget(#PB_Any, 0, 80, 100, 20, "  Wan IP Address")
      
    EndIf
  
    
Procedure GetWanIp()
  Protected Ip.s, IP1.i, IP2.i, IP3.i,IP4.i
 
  IP = StringField(Trim(Mid(Buffer, 1, 15)), 1, "<")
 
  IP1 = Val(StringField(IP, 1, "."))
  IP2 = Val(StringField(IP, 2, "."))
  IP3 = Val(StringField(IP, 3, "."))
  IP4 = Val(StringField(IP, 4, "."))

  ProcedureReturn MakeIPAddress(IP1, IP2, IP3, IP4)
EndProcedure    
    
    
    
Procedure Initweb()
   
   Protected File.l
 
  ReceiveHTTPFile(GetGadgetText(#FEN1_SITE), "index.php")
 
  File=ReadFile(#PB_Any, "index.php")
 
  If File
    While Eof(File)=0
      Buffer=ReadString(File)
      If FindString(Buffer, "IP :")
        Buffer=Trim(Mid(Buffer, 40))
      EndIf
    Wend
    CloseFile(File)
  EndIf
EndProcedure 
  


Procedure.s GetIp() 
    
    If InitNetwork()   
      
      ExamineIPAddresses()
      
      Result2 = NextIPAddress()
      
      ProcedureReturn IPString(Result2)
    
  EndIf



    
EndProcedure    
    
  
 Repeat
      
      Evenement.l = WaitWindowEvent()
      
      Select EventWindow()
         
          ;==============================================
         ;-EVENTS
          ;==============================================
         
 Case #FENETRE1
         
     Select Evenement
            
                Case #PB_Event_Gadget
            
     Select EventGadget()
                
                Case #FEN1_QUIT
                
                  result = MessageRequester("Dialog", "Do you really want to quit ?", #PB_MessageRequester_YesNo )
                  
                  If result= 6 
                
                Break
                
              EndIf
                
                
                
               
                Case #FEN1_GETIP
                  
                  
                  
                  ClearGadgetItems(#FEN1_edit1)
                  ClearGadgetItems(#FEN1_edit2)
                  ClearGadgetItems(#FEN1_edit3)
                  
                  Initweb()
                  SetGadgetItemText(#FEN1_edit3,1,IPString(GetWanIp()))
                  
                                                     
                  
                  GetIp()   
                  
                  SetGadgetItemText(#FEN1_edit1,1, GetIp())
                  SetGadgetItemText(#FEN1_edit2,1,GetEnvironmentVariable("COMPUTERNAME"))
                  
                  
                  
                  
                Case #FEN1_SITE
                   
                   SetGadgetText(#FEN1_SITE, site0.s)
                   SetGadgetText(#FEN1_SITE, site1.s)
                   SetGadgetText(#FEN1_SITE, site2.s)              
                   SetGadgetText(#FEN1_SITE, site3.s)               
                   SetGadgetText(#FEN1_SITE, site4.s)
                  
                  
      EndSelect   ; end of test gadget events 
            
                Case #PB_Event_CloseWindow
                  
                    Break
            
      EndSelect    
        
        
      EndSelect 
      
ForEver   

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

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

Bonjour jmg49. Regarde ce que j'ai fait sur ce post.

http://www.purebasic.fr/french/viewtopi ... 41#p146041
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

merci à toi, je l'avais vu et ai utilisé ta fonction pour l'ip wan pour récup l'ip dans la page, bon la problématique reste la même, si la page change ....le top c'est un .php sur un serveur perso qui ne renvoit que l'ip,

ce qui me pose problème c'est de faire changer la caption du bouton entre les différents sites, mais pouquoi donc il reste bloqué sur le site1.s ???

Code : Tout sélectionner

site0.s ="www.monip.org"
site1.s ="www.monip.fr"
site2.s ="www.monip.eu"
site3.s ="www.frameip.com"
site4.s ="www.hostip.fr"
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

A cause de ça

Code : Tout sélectionner

Case #FEN1_SITE        
      SetGadgetText(#FEN1_SITE, site0.s)
      SetGadgetText(#FEN1_SITE, site1.s)
      SetGadgetText(#FEN1_SITE, site2.s)              
      SetGadgetText(#FEN1_SITE, site3.s)               
      SetGadgetText(#FEN1_SITE, site4.s)
Quand tu cliques sur le bouton, tu auras forcement l'affichage du 4eme site.

je te laisse mariner un peu :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

ok , je cherche !!! :P
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

J'aime bien utiliser la fonction Get et SetGadgetData(Gadget) qui permet de lire ou de stocker une valeur dans un gadget évitant ainsi de créer une variable.

Tu l'auras compris, il faut connaitre le nom du site que tu as consulté pour pouvoir passer au suivant.

Le premier site prendra la valeur 0 et le dernier, la valeur 4.
Quand on a atteint le dernier site, on revient on premier.

Code : Tout sélectionner

Case #FEN1_SITE
      Select GetGadgetData(#FEN1_SITE)
            Case 4 
                SetGadgetText(#FEN1_SITE, site0.s)
                SetGadgetData(#FEN1_SITE, 0)
                      
            Case 0
                SetGadgetText(#FEN1_SITE, site1.s)
                SetGadgetData(#FEN1_SITE, 1)
                      
            Case 1  
                SetGadgetText(#FEN1_SITE, site2.s)              
                SetGadgetData(#FEN1_SITE, 2)
                      
            Case 2  
                SetGadgetText(#FEN1_SITE, site3.s)               
                SetGadgetData(#FEN1_SITE, 3)
                      
            Case 3
                SetGadgetText(#FEN1_SITE, site4.s)
                SetGadgetData(#FEN1_SITE, 4)
       EndSelect
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

c'est ce qu'il me manquait, setgadgetdata() !

parceque j'en étais là dans mon raisonnement :

Code : Tout sélectionner

               Case #FEN1_SITE 
                   
                   SetGadgetText(#FEN1_SITE, site0.s)
                   
                Case #FEN1_SITE   
                      
                   
                   SetGadgetText(#FEN1_SITE, site1.s)
                   
                   
                Case #FEN1_SITE
                   
                   SetGadgetText(#FEN1_SITE, site2.s)              
                   
                Case #FEN1_SITE  
                   
                   SetGadgetText(#FEN1_SITE, site3.s)               
                   
               Case #FEN1_SITE  
                   
                   SetGadgetText(#FEN1_SITE, site4.s)

et ça , ça va pas !!!! mais pas du tout ! :mrgreen: , allez j'implémente !!
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

fonctionnement étrange , j'ai bien implémenté la suite, le changement se fait bien dans le bouton,

mais la croix pour fermer la fenêtre ne fonctionne plus ,

mais plus étrange encore, lorsque je compile , avec ou sans débogueur, le prog fonctionne bien (sauf la croix ) pour renvoyer l'ip wan,

une fois l'exécutable généré, l'ip wan n'est plus renvoyée je n'obtiens que 0.0.0.0 dans le gadgeteditor,

je n'avais pas remarqué mais ça le faisait aussi avant d'implémenter ta routine Falsam, je n'avais pas généré d' .exe

dans l'EPB ok , hors EPB non
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

Je vais reprendre ton code moisi (Si si il est moisi) et voir ce qu'il ne va pas :)

Tu confonds StringGadget avec Editor gadget, tu testes des valeurs alors que les constantes sont déja defini !

Code : Tout sélectionner

result = MessageRequester("Dialog", "Do you really want to quit ?", #PB_MessageRequester_YesNo )
                  
          If result= 6 
                
                Break
                
              EndIf
Tu as du t’embêter à trouver ta valeur 6 alors que #PB_MessageRequester_yes existe.
Quand tu as une fonction comme MessageRequester(), n'hésite pas à mettre le curseur de l'éditeur sur cette fonctionnalité et à appuyer sur la touche F1 pour connaitre par exemple les valeurs de retour.

Aérer ton code c'est bien mais trop .... c'est trop.

Allez je jette un oeil sur ton code.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

:D oui moisi certainement, mais hé ho j'ai la licence que depuis la semaine dernière !!!!

les subtilités m'echappent encore , ça va aller, normalement, je vais demander de moins en moins !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

jmg49 a écrit :normalement, je vais demander de moins en moins !
Au contraire continue si tu ne connais pas bien Pure Basic. :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème gestion évènement d'un buttongadget

Message par Backup »

falsam a écrit :Aérer ton code c'est bien mais trop .... c'est trop.
si, si , ça donne une justification au menu "Compress" dans mon editeur :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

Dobro a écrit :si, si , ça donne une justification au menu "Compress" dans mon editeur :mrgreen:
Hé hé ouiiii.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problème gestion évènement d'un buttongadget

Message par falsam »

Ton code légèrement remis en forme est maintenant suffisamment clair pour te dire qu'il n'a jamais du fonctionner correctement.

Code : Tout sélectionner

;PureBasic 
;Basic Net tool 
;JmG49@2014

Enumeration 0 ; Id. Fenêtres
  #FENETRE1
EndEnumeration

Enumeration 0 ; Id. Gadgets
   #FEN1_GETIP
   #FEN1_SITE
   #FEN1_edit1
   #FEN1_edit2
   #FEN1_edit3
   #FEN1_edit4
EndEnumeration

Global Buffer.s

site0.s ="www.monip.org"
site1.s ="www.monip.fr"
site2.s ="www.monip.eu"
site3.s ="www.frameip.com"
site4.s ="www.hostip.fr"

InitNetwork()  

If OpenWindow(#FENETRE1, 320, 200, 570, 150, "PureBasic - Network Utility: IP Adresses (JmG@2014)", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#FEN1_GETIP, 200, 10, 130, 20, "Get Ip")
  ButtonGadget(#FEN1_SITE, 10, 10, 170, 20, site0.s)
  StringGadget(#FEN1_edit1, 120, 40, 150, 20, "")
  StringGadget(#FEN1_edit2, 300, 40, 160, 20, "")
  StringGadget(#FEN1_edit3, 120, 80, 150, 20, "")
  StringGadget(#FEN1_edit4, 300, 80, 160, 20, "")
  TextGadget(#PB_Any, 10, 40, 100, 20, "Local IP Address")
  TextGadget(#PB_Any, 10, 80, 100, 20, "Wan IP Address")      
EndIf
  
    
Procedure GetWanIp()
  Protected Ip.s, IP1.i, IP2.i, IP3.i,IP4.i

  IP = StringField(Trim(Mid(Buffer, 1, 15)), 1, "<")

  IP1 = Val(StringField(IP, 1, "."))
  IP2 = Val(StringField(IP, 2, "."))
  IP3 = Val(StringField(IP, 3, "."))
  IP4 = Val(StringField(IP, 4, "."))

  ProcedureReturn MakeIPAddress(IP1, IP2, IP3, IP4)
EndProcedure    
   
       
Procedure Initweb()   
  Protected File.l

  ReceiveHTTPFile(GetGadgetText(#FEN1_SITE), "index.php")
  File=ReadFile(#PB_Any, "index.php")

  If File
    While Eof(File)=0
      Buffer=ReadString(File)
      If FindString(Buffer, "IP :")
        Buffer=Trim(Mid(Buffer, 40))
      EndIf
    Wend
    CloseFile(File)
  EndIf
  DeleteFile("index.php")
  Debug buffer
  
EndProcedure 

Procedure.s GetIp() 
  ExamineIPAddresses()  
  Result2 = NextIPAddress()
      
  ProcedureReturn IPString(Result2)
EndProcedure    
    
;-Boucle évenementielle  
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()  
          Case #FEN1_GETIP
            SetGadgetText(#FEN1_edit1, "")
            SetGadgetText(#FEN1_edit2, "")
            SetGadgetText(#FEN1_edit3, "")
          
            Initweb()
            SetGadgetText(#FEN1_edit3, IPString(GetWanIp()))                                                 
                  
            GetIp()           
            SetGadgetText(#FEN1_edit1, GetIp())
            SetGadgetText(#FEN1_edit2, GetEnvironmentVariable("COMPUTERNAME"))      
            
          Case #FEN1_SITE
            Select GetGadgetData(#FEN1_SITE)  
              Case 4 
                SetGadgetText(#FEN1_SITE, site0.s)
                SetGadgetData(#FEN1_SITE, 0)
                      
              Case 0
                SetGadgetText(#FEN1_SITE, site1.s)
                SetGadgetData(#FEN1_SITE, 1)
   
              Case 1  
                SetGadgetText(#FEN1_SITE, site2.s)              
                SetGadgetData(#FEN1_SITE, 2)
                        
              Case 2  
                SetGadgetText(#FEN1_SITE, site3.s)               
                SetGadgetData(#FEN1_SITE, 3)
                        
              Case 3
                SetGadgetText(#FEN1_SITE, site4.s)
                SetGadgetData(#FEN1_SITE, 4)    
            EndSelect    
        EndSelect   ; end of test gadget events 
        
      Case #PB_Event_CloseWindow
        If MessageRequester("Dialog", "Do you really want to quit ?", #PB_MessageRequester_YesNo ) = #PB_MessageRequester_Yes
          End
        EndIf
        
    EndSelect       
ForEver   
J'ai ajouté Debug buffer dans ta procédure Initweb() pour te montrer que tu ne reçois jamais rien.

Remplace maintenant

Code : Tout sélectionner

ReceiveHTTPFile(GetGadgetText(#FEN1_SITE), "index.php")
par

Code : Tout sélectionner

ReceiveHTTPFile("http://"+GetGadgetText(#FEN1_SITE), "index.php")
et test à nouveau.

Cette fois çi ta variable buffer reçoit bien quelques chose mais tu devras formater le résultat en fonction du site que tu as sélectionné.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
jmg49
Messages : 153
Inscription : mer. 26/févr./2014 8:53

Re: Problème gestion évènement d'un buttongadget

Message par jmg49 »

:D voila pourquoi je voyais pas les requetes internet sortir avec un firewall logiciel !

j'ai pas encore tout saisi pour le debugueur , pas à pas etc ... je comprends mieux maintenant ,
Répondre