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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
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 »

Tu ne peux pas utiliser tel quel ce que j'ai fait pour ton code. Le résultat renvoyé par les différents sites que tu consultes n'est pas formater de la même manière pour récupérer l'adresse ip publique d'un pc.

j'ai modifié ton code en conséquence.

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.s GetWanIp(Site)   
  Protected File.l, IPPositionStart, IPPositionEnd
  
  ReceiveHTTPFile("http://"+GetGadgetText(#FEN1_SITE), "index.php")
  File=ReadFile(#PB_Any, "index.php")
  
  Buffer = ""
  If File
    While Eof(File)=0
      Buffer+ReadString(File)
    Wend
    
    ;Debug buffer
    
    Select Site 
      Case 0 ;www.monip.org
        IPPositionStart = FindString(Buffer, "IP :")+5
        IPPositionEnd   = FindString(Buffer, "<br>", IPPositionStart)
                
      Case 1 ;www.monip.fr (Pas de réception d'élément)
        
      Case 2 ;www.monip.eu  
        IPPositionStart = FindString(Buffer, "<span class="+Chr(34)+"Style1"+Chr(34)+">")+21
        IPPositionEnd   = FindString(Buffer, "</span>", IPPositionStart)
        
      Case 3 ;www.frameip.com
        IPPositionStart = FindString(Buffer, "<a href="+Chr(34)+"/mon-adresse-ip-internet/"+Chr(34)+">")+36
        IPPositionEnd   = FindString(Buffer, ":", IPPositionStart)
        
      Case 4 ;www.hostip.fr
        IPPositionStart = FindString(Buffer, "value=")+7
        IPPositionEnd   = FindString(Buffer, Chr(34), IPPositionStart)
        
    EndSelect
    
    Buffer=Trim(Mid(Buffer, IPPositionStart, IPPositionEnd-IPPositionStart))
        
    CloseFile(File)
  EndIf
  DeleteFile("index.php")
    
  ProcedureReturn 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, "")
            
            ;La procédure GetWanIp() doit connaitre le site qui est testé.
            SetGadgetText(#FEN1_edit3, GetWanIp(GetGadgetData(#FEN1_SITE))) 
                  
            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   
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 »

yeaaah !! superbe, étant donné que je suis au travail, je n'aurais pas pu parser tout ça avant cette nuit !!!!

merci pour la réorg du source , c'est bien plus clair et compréhensible maintenant,

si j'ai pas compris comment gérer les events avec ça !!! j'arrête tout !

edit :

terrible , un fois compressé , l'exe fait 22ko ! excellent !
Répondre