Page 1 sur 1

Secret du WebGadget()

Publié : jeu. 10/mars/2011 21:19
par Fortix
Bonsoir, :D

Est il possible de récuperer l'évènement du bouton "Executer"

Code : Tout sélectionner

If OpenWindow(0,200,200,450,450,"Test",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
    url$="about:<html><body scroll='yes' leftmargin='0' topmargin='0' bgcolor='#000000'><INPUT id='B1' type='button' value='Execute'></body></html>"
    WebGadget(0,0,0,450,450,url$)
  
    Repeat
        ev=WaitWindowEvent()
    Until ev=#PB_Event_CloseWindow
EndIf
Je pense que celà pourrait intéresser beaucoup de monde :lol:

merci à vous :D

Re: Secret du WebGadget()

Publié : ven. 11/mars/2011 9:06
par djes
Cela doit être possible mais c'est très compliqué! Regarde du côté de Comate sur le forum anglais. Sinon, tu peux utiliser ta propre machine comme serveur, en mettant "127.0.0.1" comme adresse dans le "<form>" ; il y a des exemples de code serveur sur Codearchiv et sur le forum.

Re: Secret du WebGadget()

Publié : ven. 11/mars/2011 12:01
par Fortix
merci @djes :D
cependant dès qu'il y a quelques chose de compliqué à résoudre, on doit souvent visiter le forum côté Anglais :lol:

:D

Re: Secret du WebGadget()

Publié : ven. 11/mars/2011 12:45
par Fortix
Effectivement c'est très intéressant 8)

mais j'étais loin de penser que c'était aussi compliqué que ça :lol:

mon idée de base concistait à créer une interface en Html pour une appli en PB
et l'interface devant être généré par l'appli même :lol:

je suis certain que ce projet ouvrirait une nouvelle "brêche" en therme de créativité et d'ingéniosité :lol:
car l'on pourra faire des éffets graphiques spétaculaires sur l'interface en quelques lignes css toute en assurant la puissance max du programme en PB;

le plus intéressant est de faire une séparation nette entre la partie Html et PB 8)

maintenant il faut trouver comme assurer la communication entre l'interface et l'appli :lol:

Re: Secret du WebGadget()

Publié : ven. 11/mars/2011 12:58
par gnozal
Il y a tout un topic à ce sujet sur le forum français : http://www.purebasic.fr/french/viewtopic.php?f=6&t=7864

Re: Secret du WebGadget()

Publié : ven. 11/mars/2011 14:32
par Fortix
Effectivement :D

d'ailleur ce code pourrait être une bonne phase pour mon projet:

Code : Tout sélectionner

Enumeration 0
#OLECMDEXECOPT_DODEFAULT 
#OLECMDEXECOPT_PROMPTUSER 
#OLECMDEXECOPT_DONTPROMPTUSER 
#OLECMDEXECOPT_SHOWHELP 
EndEnumeration 

Enumeration 1
#OLECMDID_OPEN 
#OLECMDID_NEW 
#OLECMDID_SAVE 
#OLECMDID_SAVEAS 
#OLECMDID_SAVECOPYAS 
#OLECMDID_PRINT 
#OLECMDID_PRINTPREVIEW 
#OLECMDID_PAGESETUP 
#OLECMDID_SPELL 
#OLECMDID_PROPERTIES 
#OLECMDID_CUT 
#OLECMDID_COPY 
#OLECMDID_PASTE 
#OLECMDID_PASTESPECIAL 
#OLECMDID_UNDO 
#OLECMDID_REDO 
#OLECMDID_SELECTALL 
#OLECMDID_CLEARSELECTION 
#OLECMDID_ZOOM 
#OLECMDID_GETZOOMRANGE 
#OLECMDID_UPDATECOMMANDS 
#OLECMDID_REFRESH 
#OLECMDID_STOP 
#OLECMDID_HIDETOOLBARS 
#OLECMDID_SETPROGRESSMAX 
#OLECMDID_SETPROGRESSPOS 
#OLECMDID_SETPROGRESSTEXT 
#OLECMDID_SETTITLE 
#OLECMDID_SETDOWNLOADSTATE 
#OLECMDID_STOPDOWNLOAD 
EndEnumeration 


#TPM_RETURNCMD =$100
#TPM_NONOTIFY =$80

#DOCHOSTUIFLAG_THEME = $40000

Structure DOCHOSTUIINFO
cbSize.l
dwFlags.l
dwDoubleClick.l
*pchHostCss.l
*pchHostNS.l
EndStructure 

;Window 
Enumeration 
#Main 
EndEnumeration 

;Gadget 
Enumeration 
#Web 
EndEnumeration 

;Popup 
Enumeration 
#Popup 
#PureBasic 
EndEnumeration 

Structure IDocHost
*IDocHostUIHandler.IDocHostUIHandler
ObjectCount.l
EndStructure 

Global NewList IDocHost.IDocHost()

Procedure AddRef(*THIS.IDocHost)
*THIS\ObjectCount + 1
ProcedureReturn *THIS\ObjectCount
EndProcedure 

Procedure QueryInterface(*THIS.IDocHost, *iid.GUID, *Object.LONG)
If CompareMemory (*iid, ?IID_IUnknown, SizeOf (GUID)) Or CompareMemory (*iid, ?IID_IDocHostUIHandler, SizeOf (GUID))
*Object\l = *THIS
AddRef(*THIS.IDocHost)
ProcedureReturn #S_OK 
Else 
*Object\l = 0
ProcedureReturn #E_NOINTERFACE 
EndIf 
EndProcedure 

Procedure.l Release(*THIS.IDocHost)
*THIS\ObjectCount - 1
ProcedureReturn *THIS\ObjectCount
EndProcedure 

Procedure ShowContextMenu(*THIS.IDocHost, dwID.l, *ppt.POINT, *pcmdtReserved.IUnknown, *pdispReserved.IDispatch)
Protected bstr.l,iSelection.l,pElem.IHTMLElement,parent.IHTMLElement

Select dwID
Case 0
Debug "CONTEXT_MENU_DEFAULT" 

Case 1
Debug "CONTEXT_MENU_IMAGE" 

Case 2
Debug "CONTEXT_MENU_CONTROL" 
;Pour avoir plus de renseignement sur l'objet 
If *pdispReserved\QueryInterface(?IID_IHTMLElement, @pElem.IHTMLElement)= #S_OK 
If pElem

pElem\get_tagName(@bstr)
If bstr
Debug PeekS (bstr, 200, #PB_Unicode )
EndIf 

pElem\get_outerHTML(@bstr)
If bstr
Debug PeekS (bstr, 200, #PB_Unicode )
EndIf 

pElem\get_parentElement(@parent.IHTMLElement)
parent\get_outerHTML(@bstr)
parent\Release()
If bstr
Debug PeekS (bstr, 200, #PB_Unicode )
EndIf 

pElem\Release()
Debug SysFreeString_ (@bstr)
EndIf 
EndIf 
iSelection = TrackPopupMenu_ ( MenuID ( #Popup ), #TPM_LEFTALIGN | #TPM_RIGHTBUTTON | #TPM_RETURNCMD ,*ppt\x,*ppt\y,0, GadgetID ( #Web ), #Null )
If iSelection <> 0
PostMessage_ ( WindowID ( #Main ), #WM_COMMAND , iSelection, #Null )
ProcedureReturn #False ;0 pour interdire le menu par défaut 
EndIf 


Case 3
Debug "CONTEXT_MENU_TABLE" 

Case 4
Debug "CONTEXT_MENU_TEXTSELECT" 

Case 5
Debug "CONTEXT_MENU_ANCHOR" 

Case 6
Debug "CONTEXT_MENU_UNKNOWN" 
EndSelect 

ProcedureReturn #True ;1 pour autoriser le menu par défaut 
EndProcedure 

Procedure GetHostInfo(*THIS.IDocHost, *pInfo.DOCHOSTUIINFO)
*pInfo\dwFlags = *pInfo\dwFlags | #DOCHOSTUIFLAG_THEME 
ProcedureReturn #S_OK 
EndProcedure 

Procedure ShowUI(*THIS.IDocHost, dwID.l, *pActiveObject.l, *pCommandTarget.l, *pFrame.l, *pDoc.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure HideUI(*THIS.IDocHost)
ProcedureReturn #S_OK 
EndProcedure 

Procedure UpdateUI(*THIS.IDocHost)
ProcedureReturn #S_OK 
EndProcedure 

Procedure EnableModeless(*THIS.IDocHost, fEnable.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure OnDocWindowActivate(*THIS.IDocHost, fActivate.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure OnFrameWindowActivate(*THIS.IDocHost, fActivate.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure ResizeBorder(*THIS.IDocHost, *prcBorder.l, *pUIWindow.l, fFrameWindow.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure TranslateAccelerator(*THIS.IDocHost, *lpMsg.MSG, *pguidCmdGroup.GUID, nCmdID.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure GetOptionKeyPath(*THIS.IDocHost, *pchKey.l, dw.l)
ProcedureReturn #S_OK 
EndProcedure 

Procedure GetDropTarget(*THIS.IDocHost, *pDropTarget.l, *ppDropTarget.l)
*ppDropTarget= #Null 
ProcedureReturn #E_NOTIMPL 
EndProcedure 

Procedure GetExternal(*THIS.IDocHost, *ppDispatch.LONG)
*ppDispatch\l = *THIS
ProcedureReturn #S_OK 
EndProcedure 

Procedure TranslateUrl(*THIS.IDocHost, dwTranslate.l, *pchURLIn.l, *ppchURLOut.l)
ProcedureReturn #S_FALSE 
EndProcedure 

Procedure FilterDataObject(*THIS.IDocHost, *pDO.IDataObject, *ppDORet.IDataObject)
*ppDORet = #Null 
ProcedureReturn #S_FALSE 
EndProcedure 

If OpenWindow ( #Main ,0,0,600,300, "WebGadget" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered )
CreateGadgetList ( WindowID ( #Main ))
WebGadget ( #Web ,10,10,580,280, "http://www.google.fr/" )

If CreatePopupMenu ( #Popup )
MenuItem ( #PureBasic , "Pure Basic" )
EndIf 

AddElement (IDocHost())
IDocHost()\IDocHostUIHandler=?IDocHostUIHandler

webBrowser.IWebBrowser2 = GetWindowLong_ ( GadgetID ( #Web ), #GWL_USERDATA )
If webBrowser\get_Document(@pDisp.IDispatch)= #S_OK 
If pDisp\QueryInterface(?IID_ICustomDoc, @pDoc.ICustomDoc)= #S_OK 
pdoc\SetUIHandler(@IDocHost()\IDocHostUIHandler)
pDoc\Release()
EndIf 
pDisp\Release()
EndIf 

Repeat 
event= WaitWindowEvent ()
;ViewEvent(event2) 
Select event
Case #PB_Event_Menu 
Select EventMenu ()
Case #PureBasic 
SetClipboardText ( "PureBasic" )
webBrowser\ExecWB( #OLECMDID_PASTE , #OLECMDEXECOPT_DONTPROMPTUSER , 0, 0)
EndSelect 
Case #WM_CLOSE 
Quit=1
EndSelect 
Until Quit = 1
EndIf 


DataSection 
IDocHostUIHandler:
Data.l @QueryInterface()
Data.l @AddRef()
Data.l @Release()
Data.l @ShowContextMenu()
Data.l @GetHostInfo()
Data.l @ShowUI()
Data.l @HideUI()
Data.l @UpdateUI()
Data.l @EnableModeless()
Data.l @OnDocWindowActivate()
Data.l @OnFrameWindowActivate()
Data.l @ResizeBorder()
Data.l @TranslateAccelerator()
Data.l @GetOptionKeyPath()
Data.l @GetDropTarget()
Data.l @GetExternal()
Data.l @TranslateUrl()
Data.l @FilterDataObject()

IID_IDocHostUIHandler:
Data.l $BD3F23C0
Data.w $D43E, $11CF
Data.b $89, $3B, $00, $AA, $00, $BD, $CE, $1A

IID_ICustomDoc:
Data.l $3050F3F0
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IHTMLElement:
Data.l $3050F1FF
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B

IID_IUnknown:
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
EndDataSection 
mais pour le cas d'une interface Html généré par l'apli, que faudrait il mettre comme adresse pour pouvoir capturer les évènement?

peut être que je suis à côté de la plaque c'est possible aussi :lol: