Modification d'une page web dynamiquement ?

Programmation d'applications complexes
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Modification d'une page web dynamiquement ?

Message par nico »

Salut,

Est t' il possible de modifier une page web dynamiquement dans un webgadget, c'est à dire que lorsque j'affiche une page web, je souhaiterais ajouter des informations sur cette celle-ci.

Où est t' on obligé d'enregistrer cette page sur le disque, la modifier pour ensuite la ré-afficher?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Modification d'une page web dynamiquement ?

Message par G-Rom »

PB ne te permet pas à ma connaissance d'avoir accès au source code d'un webgadget ( Feature à demander ? )
Comme tu le dis , tu est mieux à passer par un fichier temporaire.

@+
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Modification d'une page web dynamiquement ?

Message par venom »

Je pense aussi que le fichier temporaire est plus judicieux dans se cas là.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Emperor
Messages : 36
Inscription : lun. 28/juil./2008 18:36
Localisation : Québec, Québec

Re: Modification d'une page web dynamiquement ?

Message par Emperor »

- SetGadgetItemText(): avec #PB_Web_HtmlCode comme 'Element' le code html peut être INSéré dans le Gadget.
- GetGadgetItemText(): LES constantes suivantes peuvent être utilisées pour obtenir une information:
#PB_Web_HtmlCode : Renvoie le code html du gadget.
#PB_Web_PageTitle : Renvoie le titre de la page affichée.
#PB_Web_StatusMessage: Renvoie le message actuel de la barre d'état.
#PB_Web_SelectedText : Renvoie le texte sélectionné à l'intérieur du gadget.
Voilà je crois que tu as ta réponse ;)
The time flies away
Flies towards the farrest skies
A rush of adrenaline
Stopped by the global acceptation
Of me


Ambient Reminiscences - Mouchalagane
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

Re: Modification d'une page web dynamiquement ?

Message par Warkering »

Ou bien tu affiche une page web en PHP que tu créer et envoie les arguments à mesure.
Le problème, c'est qu'il te faut un serveur web ou local, mais ça laisse quand même plus de flexibilité.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Modification d'une page web dynamiquement ?

Message par djes »

Il est possible de faire beaucoup plus de choses que ça, regarde sur le forum anglais.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Modification d'une page web dynamiquement ?

Message par nico »

SetGadgetItemText à l'air de buguer, j'ai une erreur de script et les liens ne fonctionne plus et l'image Google n' apparait plus.

Code : Tout sélectionner

Enumeration
	#Web
	#Button1
EndEnumeration

If OpenWindow(0,0,0,800,400,"Web",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
	CreateGadgetList(WindowID(0))
	WebGadget(#Web,0,0,800,360,"")
	ButtonGadget(#Button1,10,370,100,20,"Modifier la page")
	SetGadgetText(#Web,"http://www.google.com")
	
	Repeat
		Event=WaitWindowEvent()
		If Event=#PB_Event_Gadget
			Select EventGadget()
				Case #Button1
				  Text.s=GetGadgetItemText(#Web, #PB_Web_HtmlCode)
				  Text=ReplaceString(Text,"plus","plus nico",#PB_String_NoCase)
				  SetGadgetItemText(#Web, #PB_Web_HtmlCode,Text)
			EndSelect
		EndIf
	Until Event=#PB_Event_CloseWindow
EndIf
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Modification d'une page web dynamiquement ?

Message par Backup »

on dirai que la fonction abouti , mais que les scripts de la pages, n'apprécie pas la manoeuvre :?

oui c'est bien les scripts Js le probleme !!

regarde avec une pages sans script JS ça marche

Code : Tout sélectionner

Enumeration
   #Web
   #Button1
EndEnumeration

If OpenWindow(0,0,0,800,400,"Web",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
   CreateGadgetList(WindowID(0))
   WebGadget(#Web,0,0,800,360,"")
   ButtonGadget(#Button1,10,370,100,20,"Modifier la page")
   SetGadgetText(#Web,"http://michel.dobro.free.fr/pages_html/liens.htm")
   
   Repeat
      Event=WaitWindowEvent()
      If Event=#PB_Event_Gadget
         Select EventGadget()
            Case #Button1
              
               Text.s=GetGadgetItemText(#Web, #PB_Web_HtmlCode)
               
           
               Text.s=ReplaceString(Text.s,"PureBasic","NICO",#PB_String_NoCase)
               SetGadgetItemText(#Web, #PB_Web_HtmlCode,Text.s)
         EndSelect
      EndIf
   Until Event=#PB_Event_CloseWindow
EndIf
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Modification d'une page web dynamiquement ?

Message par Backup »

dans mon stock j'ai ce code la

Code : Tout sélectionner

; voir ici : http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx
Declare StringToBStr (string$) 

#SIZEOF_WORD=2

Enumeration
   #bold
   #link
   #link_google
   #insert_image
   #insert_image2
   #edit_mode
   #web_gadget
   #Window
EndEnumeration

Procedure.l Ansi2Uni(string.s) ; Converts normal (Ansi) string To Unicode
   *out = AllocateMemory(Len(string)*2 * #SIZEOF_WORD)
   MultiByteToWideChar_(#CP_ACP, 0, string, -1, *out, Len(string)) 
   ProcedureReturn *out 
EndProcedure

If OpenWindow(#Window, 0, 0, 800, 600, "WebGadget Edit", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
   If CreateGadgetList(WindowID(#Window))
      
      WebGadget(#web_gadget, 5, 5, 790, 500, "http://www.purebasic.com/")
      ButtonGadget(#bold, 5, 540, 100, 25, "Bold")
      ButtonGadget(#link, 110, 540, 100, 25, "Link...")
      ButtonGadget(#link_google, 210, 540, 100, 25, "Link google")
      ButtonGadget(#insert_image, 310, 540, 100, 25, "Insert image...")
      ButtonGadget(#insert_image2, 410, 540, 200, 25, "Insert image ess.jpg (don't work !)")
      ButtonGadget(#edit_mode, 210, 510, 100, 25, "Edit mode",#PB_Button_Toggle)
      
      ;{initialisation webgadget
      ; get webgadgets IWebBrowser2 interface:
      Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#web_gadget), #GWL_USERDATA)   
      
      ; wait For page To be loaded..
      Repeat
         While WindowEvent(): Wend
         Delay(1)
         Browser\get_Busy(@IsBusy.l)
      Until IsBusy = 0
      
      ; get the document interface
      If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
         
         ; query For IHTMLDocument3:
         If DocumentDispatch\QueryInterface(?IID_IHTMLDocument2, @Document.IHTMLDocument2) = #S_OK
            
            ; here you have a IHTMLDocument2 pointer,  can work with it...
            Document\put_designMode("Off") ; Turns off Edit Mode
            ;Document\put_designMode(Ansi2Uni("On")) ; Turns on Edit Mode ;
            CmdTarget.IOleCommandTarget
            If DocumentDispatch\QueryInterface(?IID_IOleCommandTarget, @CmdTarget.IOleCommandTarget) = #S_OK
               
               ;CmdTarget\Exec(?CGID_MSHTML, #IDM_2D_POSITION, #OLECMDEXECOPT_DONTPROMPTUSER, @var, NULL) ;Lets you drag  drop items
               ; CmdTarget\Release()
            EndIf
            
            Document\Release()
         EndIf
         
         DocumentDispatch\Release()   
      EndIf
      ;}
      edit=0
      Success.VARIANT
      Command.VARIANT
      Repeat
         EventID = WaitWindowEvent()
         
         If EventID = #PB_Event_Gadget ;checks For the events
            Select EventGadget() ;Checks For Gadget Events
               Case  #bold
                  
                  
                  
                  
                  
                  
                  Command\vt = #VT_BSTR
                  Command\bstrVal = 0
                  Document\execCommand("Bold", 0, @Command , @Success)
               Case #link
                  Command\vt = #VT_BSTR
                  Command\bstrVal = 0
                  Document\execCommand("CreateLink", 1, @Command , @Success)
               Case #link_google
                  Command\vt = #VT_BSTR
                  Command\bstrVal = Ansi2Uni("http://www.google.fr")
                  Document\execCommand("CreateLink", 0, @Command , @Success)
               Case #insert_image
                  Command\vt = #VT_BSTR
                  Command\bstrVal = 0
                  Document\execCommand("InsertImage", 1, @Command , @Success) 
               Case #insert_image2
                  CallDebugger
                  Command\vt = #VT_BSTR
                  
                  ; Command\bstrVal = Ansi2Uni("far_breton.jpg") 
                  Command\bstrVal = StringToBStr("D:\PureBasic\dobro\ExemplePerso\internet\far_breton.jpg") 
                  Document\execCommand("insertimage",#False, @Command , @Success)
               Case #edit_mode
                  If edit=1
                     edit=0
                     Document\put_designMode("Off")
                  Else
                     edit=1
                     Document\put_designMode("On")
                  EndIf
                  
            EndSelect
         EndIf
         
      Until EventID = #PB_Event_CloseWindow
      If CmdTarget
         CmdTarget\Release()
      EndIf
   EndIf
EndIf

End

Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
   Protected Unicode$ = Space(Len(string$)* 2 + 2)
   Protected bstr_string.l
   PokeS(@Unicode$, string$, -1, #PB_Unicode)
   bstr_string = SysAllocString_(@Unicode$)
   ProcedureReturn bstr_string
EndProcedure



DataSection
   
   IID_IHTMLDocument2:  ; {332c4425-26cb-11d0-b483-00c04fd90119}
   Data.l $332C4425
   Data.w $26CB, $11D0
   Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
   
   IID_IOleCommandTarget:  ; {b722bccb-4e68-101b-a2bc-00aa00404770}
   Data.l $B722BCCB
   Data.w $4E68, $101B
   Data.b $A2, $BC, $00, $AA, $00, $40, $47, $70
   
   CGID_MSHTML: ; { 0xDE4BA900, 0x59CA, 0x11CF, { 0x95, 0x92, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 } }
   Data.l $DE4BA900
   Data.w $59CA, $11CF
   Data.b $95, $92, $44, $45, $53, $54, $00, $00
EndDataSection
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Modification d'une page web dynamiquement ?

Message par nico »

Oui je connais ca code qui permet de mette une page en mode édition mais c'est un peu différent.

J'ai trouvé une solution (code que j'avais déjà réalisé mais que je n'avais plus), je la poste dans la section Astuces.
Répondre