Javascript et Purebasic

Partagez votre expérience de PureBasic avec les autres utilisateurs.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Javascript et Purebasic

Message par nico »

Ce sujet fait suite a celui de Falsam, je le poste ici parce que ça sera plus facile pour moi de le retrouver par la suite et parce que je pense que la méthode employée ici ne correspond pas à celle recherchée par le sujet de Falsam.
Sujet de Falsam: http://www.purebasic.fr/french/viewtopi ... 5&p=186386

J'avais travaillé pour simuler un seul emplacement pour tout traiter avec l’événement #PB_EventType_TitleChange, je vous soumet donc le code.
Il n'y a pas de delay ici, fonctionne seulement avec les events.
J'en ai profité pour le rendre interactif, ainsi vous pouvez changer le contenu du code html directement dans l'éditeur pour faire des tests, il y a aussi un gadget web afin de voir le contenu du code html, ça peut toujours servir même si c'est pas le but initial.

Code : Tout sélectionner

Enumeration Window
  #mainForm
EndEnumeration

Enumeration Gadget
  #TextInfo
  #StringToSearch
  #StringReplace
  #Editor
  #HideWeb
  #Bouton
EndEnumeration


HTML.s = "<html>" + Chr(13) + Chr(10)

HTML + "<head>" + Chr(13) + Chr(10)
HTML + "<meta http-equiv='X-UA-Compatible' content='IE=edge' />"  + Chr(13) + Chr(10)
HTML + "<title></title>" + Chr(13) + Chr(10)
HTML + "</head>" + Chr(13) + Chr(10)

HTML + "<body>" + Chr(13) + Chr(10)

; nécessaire pour avoir l'event PB_EventType_TitleChange
; mettre au début
HTML + "<img src='http://127.0.0.1/image.image0' >" + Chr(13) + Chr(10)

HTML + "<script>" + Chr(13) + Chr(10)

HTML + "function fixedEncodeURIComponent (str) {"  + Chr(13) + Chr(10)
HTML + "return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {"  + Chr(13) + Chr(10)
HTML + "return '%' + c.charCodeAt(0).toString(16);"  + Chr(13) + Chr(10)
HTML + "});"  + Chr(13) + Chr(10)
HTML + "}"  + Chr(13) + Chr(10)

HTML + "result = fixedEncodeURIComponent ('v_string');" + Chr(13) + Chr(10)
HTML + "document.title = result;" + Chr(13) + Chr(10)
HTML + "</script>" + Chr(13) + Chr(10)
HTML + "PureBasic Javascript" + Chr(13) + Chr(10)


HTML + "</body>" + Chr(13) + Chr(10)
HTML + "</html>" + Chr(13) + Chr(10)


Procedure.l FunctionJavascipt(Html.s, OldString.s, NewString.s, *Retour, MaxLen.l)
  
  If GetWindowData(#mainForm) = 0
    Html = ReplaceString(Html, OldString, NewString)
    SetGadgetItemText(#HideWeb, #PB_Web_HtmlCode , html)
    ProcedureReturn 0
    
  ElseIf GetWindowData(#mainForm) = 1
    SetWindowData(#mainForm, 0)
    PokeS(*Retour, Left(GetGadgetItemText(#HideWeb, #PB_Web_PageTitle), MaxLen), MaxLen)
    ProcedureReturn 1
  EndIf 
  
EndProcedure


If OpenWindow(#mainForm, 100, 100, 800, 800, "PB <==> JavasScript", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(#TextInfo, 10, 10, 340, 20, "Indiquer la variable à remplacer du code html puis la nouvelle valeur:")
  StringGadget(#StringToSearch, 360, 10, 200, 20, "")
  StringGadget(#StringReplace, 580, 10, 200, 20, "")
  EditorGadget(#Editor, 0, 40, 380, 700)
  WebGadget (#HideWeb, 420, 40, 380, 700, "")
  ButtonGadget(#Bouton, 300, 760, 200, 20, "Test Fonction Javascipt")
  
  SetWindowData(#mainForm, 0)
  
  SetGadgetText(#Editor, HTML)
  SetGadgetText(#StringToSearch, "v_string")
  SetGadgetText(#StringReplace, "Ceci est une chaîne")
  
  Repeat 
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        gadget = EventGadget()
        Select gadget
          Case #Bouton
            Retour.s = Space(256)
            ; le test qui suit est une astuce pour attendre le retour de l'event #PB_EventType_TitleChange
            If  FunctionJavascipt(GetGadgetText(#Editor), GetGadgetText(#StringToSearch), GetGadgetText(#StringReplace), @Retour.s, Len(Retour)) = 1
              Debug Retour
            EndIf 
            
            
            ; il n'y a pas besoin de modifier ce qui suit en dessous.
          Case #HideWeb
            Select EventType()
              Case #PB_EventType_TitleChange
                Debug "#PB_EventType_TitleChange"
                SetWindowData(#mainForm, 1)
                PostEvent(#PB_Event_Gadget, #mainForm, #Bouton)
            EndSelect
            
        EndSelect 
    EndSelect          
  Until  Event = #PB_Event_CloseWindow
EndIf 
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Javascript et Purebasic

Message par Shadow »

Hééé nico, ça fait plaisir de te revoir l'ami :)
Merci du code.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Javascript et Purebasic

Message par Kwai chang caine »

Tout ces trucs m'intéressent, entre PB et JS, mais j'ai encore du mal :oops:
Quoi qu'il en soit, un miracle peut toujour arriver un jour je comprendrais peut être... :mrgreen:
Merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre