Page 1 sur 2

WebGadget avancé

Publié : sam. 04/mars/2017 15:40
par omega
Bonjour,

J'aurais souhaité mettre au point un navigateur (comme firefox par exemple) mais à ma façon personnalisée. Après avoir effectué un premier test, je me suis trouvé devant un obstacle que je n'avais pas prévu. Les textes et images animés ne fonctionnent pas et les balises css sont ignorées... Y a t-il un moyen d'associer ces balises au webGadget pour qu'il puisse les prendre en charge?

Merci beaucoup

Re: WebGadget avancé

Publié : sam. 04/mars/2017 15:56
par Ar-S
Tu parles de quoi quand tu dis images et textes animés ? De flash ? d'HTML5 ?
Si tu ouvres une page web avec un webgadget, il ni a aucune raison pour qu'une animation html ne s'affiche pas.

Je ne comprends pas ce que tu veux dire avec tes CSS.
Si une page web à un css, je ne vois pas pourquoi il ne serait pas pris en charge.

Exemple :
Essaye ça : (clic sur NON si tu as une alert concernant un script en https.)

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 990, 800, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    WebGadget(0, 10, 10, 970, 780, "http://giphy.com") 
    Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow 
  EndIf

Re: WebGadget avancé

Publié : sam. 04/mars/2017 17:08
par falsam
Les textes et images animés ne fonctionnent pas et les balises css sont ignorées...
L'idéal serait d'avoir un bout de code.

Re: WebGadget avancé

Publié : lun. 06/mars/2017 12:29
par omega
Essayez ce site : www.free.fr d'abord avec Google Chrome ou firefox puis essayez le même site avec WebGadget, vous allez voir la différence.. J'ai essayé avec plusieurs sites (utilisant de l'animation) , c'est toujours le même résultat.

Re: WebGadget avancé

Publié : lun. 06/mars/2017 12:46
par falsam
Même rendu que sous chrome ou FireFox. Pourrais tu préciser :
- Ton Systéme d'exploitation
- Version de PureBasic

A mettre dans ta signature aussi pour ne plus avoir à le redemander. Merci.

Re: WebGadget avancé

Publié : lun. 06/mars/2017 13:41
par falsam
Aide a écrit :The WebGadget uses the Internet Explorer 4.0
Comme tu peux le voir, le WebGadget() sous windows est compatible Internet Explorer, tu vas trés vite rencontrer des difficultés pour le rendre visuellement compatible Chrome ou FireFox.

Un code pour t'aider qui va inscrire ton application dans la base de registre en associant la compatibilité Internet Explorer 11 à ce WebGadet().

Code : Tout sélectionner

;WebGadget HTML5 compatible
;
;Contributor: Sphere Users Pure Basic
;

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #URL
  #WebGadget
EndEnumeration

Global Url.s="http://free.fr/"

Declare Start()
Declare NavigationCallback(Gadget, NewUrl.s)

Declare RegConvertRegKeyToTopKeyAndKeyName(Key.s)
Declare RegSetValue(Key.s, ValueName.s, Value.s, Type, ComputerName.s)
Declare RegCreateKey(Key.s, ComputerName.s)
Declare RegCreateKeyValue(Key.s,ValueName.s,Value.s,Type,ComputerName.s)

Declare Exit()

Start()

Procedure Start()
  ;Rendre le webgadget compatible Internet Explorer 11  
  RegCreateKeyValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", GetFilePart(ProgramFilename()), "11001", #REG_DWORD, ".")
  
  OpenWindow(#MainForm, 0, 0, 1024, 768,"WebGadget HTML5 compatible",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  WebGadget(#WebGadget, 0, 0, 1024, 768, Url)   
  SetGadgetAttribute(#WebGadget, #PB_Web_NavigationCallback, @NavigationCallback())  
  
  SetGadgetAttribute(#WebGadget, #PB_Web_BlockPopups, #True)  
  SetGadgetAttribute(#WebGadget, #PB_Web_BlockPopupMenu, #True)
  
  myBrowser.IWebBrowser2 = GetWindowLong_(GadgetID(#WebGadget), #GWL_USERDATA)
  myBrowser\put_Silent(#True) ;Suppress error warnings in WebGadget
  myBrowser\put_Left(0) 
  
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent(5) : ForEver
EndProcedure

;Callback de navigation
Procedure NavigationCallback(Gadget, NewUrl.s) 
  Debug "Url sélectionné " + NewUrl + " - " + "Url précédent " + Url
  
  If NewUrl <> Url
    Url = NewUrl  
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure 

;-
;- U.T. Registry
Procedure RegConvertRegKeyToTopKeyAndKeyName(Key.s)
  Shared topKey,KeyName.s
  
  temp.s=StringField(Key,1,"\")
  temp=UCase(temp)
  Select temp
    Case "HKEY_CLASSES_ROOT"
      topKey=#HKEY_CLASSES_ROOT
    Case "HKEY_CURRENT_USER"
      topKey=#HKEY_CURRENT_USER
    Case "HKEY_LOCAL_MACHINE"
      topKey=#HKEY_LOCAL_MACHINE
    Case "HKEY_USERS"
      topKey=#HKEY_USERS 
    Case "HKEY_CURRENT_CONFIG"
      topKey=#HKEY_CURRENT_CONFIG 
  EndSelect
  
  PositionSlash=FindString(Key,"\",1)
  KeyName.s=Right(Key,(Len(Key)-PositionSlash))
  
EndProcedure

Procedure RegSetValue(Key.s, ValueName.s, Value.s, Type, ComputerName.s) ; Sets a Value
  
  ;Type can be #REG_SZ / #REG_DWORD / #REG_BINARY / #REG_EXPAND_SZ
  ;For REG_BINARY type use Hexa value as String
  ;Returns 1 if successful or 0 if it fails
  
  Shared RegWow64.l,RegEx,topKey,KeyName.s
  RegConvertRegKeyToTopKeyAndKeyName(Key)
  
  If ComputerName = "."
    If RegEx
      GetHandle = RegOpenKeyEx_(topKey,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey) 
    Else
      GetHandle = RegOpenKey_(topKey,KeyName,@hKey) 
    EndIf
  Else 
    lReturnCode = RegConnectRegistry_(ComputerName,topKey,@lhRemoteRegistry) 
    If RegEx
      GetHandle = RegOpenKeyEx_(lhRemoteRegistry,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey) 
    Else
      GetHandle = RegOpenKey_(lhRemoteRegistry,KeyName,@hKey) 
    EndIf
  EndIf 
  
  If GetHandle = #ERROR_SUCCESS 
    lpcbData = 255 
    lpData.s = Space(255) 
    
    Select Type 
        
      Case #REG_EXPAND_SZ 
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_EXPAND_SZ, @Value, Len(Value) + 1) 
        
      Case #REG_SZ 
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_SZ, @Value, Len(Value) + 1) 
        
      Case #REG_DWORD 
        lValue = Val(Value) 
        GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_DWORD, @lValue, 4) 
        
      Case #REG_BINARY
        LenBuffer=Len(Value)/2
        *RegBuffer=AllocateMemory(LenBuffer)
        For n=0 To LenBuffer-1
          OctetHexa.s=Mid(Value,(n*2)+1,2)
          Octet=Val("$"+OctetHexa)
          PokeB(*RegBuffer+n,Octet)
        Next
        GetHandle= RegSetValueEx_(hKey,ValueName,0,#REG_BINARY,*RegBuffer,LenBuffer) 
        FreeMemory(*RegBuffer)
        
    EndSelect 
    
    RegCloseKey_(hKey) 
    ergebnis = 1 
    ProcedureReturn ergebnis 
  Else 
    RegCloseKey_(hKey) 
    ergebnis = 0 
    ProcedureReturn ergebnis 
  EndIf 
EndProcedure 

Procedure RegCreateKey(Key.s, ComputerName.s)
  ;It create subkey if KeyPath don't exist
  ;Returns 1 if successful or 0 if it fails
  
  Shared RegWow64.l,RegEx,topKey,KeyName.s
  
  RegConvertRegKeyToTopKeyAndKeyName(Key)  
  lpSecurityAttributes.SECURITY_ATTRIBUTEs 
  
  If ComputerName = "."
    If RegEx
      GetHandle = RegCreateKeyEx_(topKey,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
    Else
      GetHandle = RegCreateKey_(topKey,KeyName,@hNewKey)
    EndIf
  Else 
    lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry) 
    If RegEx
      GetHandle = RegCreateKeyEx_(lhRemoteRegistry,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
    Else
      GetHandle = RegCreateKey_(lhRemoteRegistry,KeyName,@hNewKey) 
    EndIf
  EndIf 
  
  If GetHandle = #ERROR_SUCCESS 
    GetHandle = RegCloseKey_(hNewKey) 
    CreateKey = #True 
  Else 
    CreateKey = #False 
  EndIf 
  ProcedureReturn CreateKey 
EndProcedure 

Procedure RegCreateKeyValue(Key.s,ValueName.s,Value.s,Type,ComputerName.s) ; Creates a Key and a Value in a Single Command
  
  ;Type can be #REG_SZ or #REG_DWORD
  ;Returns 1 if successful or 0 if it fails  
  RegCreateKey(Key,ComputerName) 
  ProcedureReturn RegSetValue(Key,ValueName,Value,Type,ComputerName) 
EndProcedure 

Procedure Exit()
  End  
EndProcedure
Le WebGadget() est associé à un callback de navigation qui te donnera le lien cliqué et le lien précédent.

Re: WebGadget avancé

Publié : lun. 06/mars/2017 19:06
par Kwai chang caine
Il est cool ton code FALSAM, merci 8)
C'est vrai depuis l'abandon de FF par FRED, on peut pas dire que le webgadget est dernier cri :|

J'ai testé avec ça...
http://www.mon-navigateur.com/
Ca marche du feu de dieu !!! 8O

J'suis au dernier cri....IE9 :mrgreen:
A moins que ce soit toi qui pousse le dernier :lol:

Re: WebGadget avancé

Publié : lun. 06/mars/2017 19:16
par Ar-S
Question.
IE est propriétaire. Chrome aussi. Je crois que chromium ne l'est pas (je ne sais plus) mais firefox est libre.
Pourquoi ne pas baser ce webgadget sur firefox, quitte à alourdir le gadget en natif.
En 2017, un webgadget se doit d'être à jour.

Re: WebGadget avancé

Publié : lun. 06/mars/2017 20:14
par djes
C'est un bon débat, je pense que ça pourrait mener à une amélioration significative du langage.

En fait, certains composants pourraient être intégrés, mais cela implique un développement spécifique très coûteux en temps, en énergie, en argent même. En outre, ils ne servent pas à tout le monde, et, pour une même fonctionnalité, il y a plusieurs choix possibles.

Je me demande si la clef ne se situe pas dans une plus grande facilité d'intégration de composants (avec peut-être une lib spécifique ou de nouveaux mots-clés), avec un dossier exemple dédié à cette tâche... :?:

La bibliothèque commate remplit un peu ce rôle, mais elle est incompréhensible pour des amateurs...

Re: WebGadget avancé

Publié : lun. 06/mars/2017 20:26
par omega
Je me demande si la clef ne se situe pas dans une plus grande facilité d'intégration de composants (avec peut-être une lib spécifique ou de nouveaux mots-clés), avec un dossier exemple dédié à cette tâche... :?:
C'est justement ce que je pensais, il y a sûrement des lib nécessaires qui sont absentes), j'aurais voulu personnaliser WebGadget à ma façon, mais pas à ce point...

Re: WebGadget avancé

Publié : lun. 06/mars/2017 20:31
par omega
@Djes
Je crois que ce n'est pas un bon exemple http://www.mon-navigateur.com)
J'aurais préféré que tu choisisses une page d'accueil qui contient des images et des textes qui bougent, c'est au niveau des sites de ce type que ça coince à mon niveau....

Re: WebGadget avancé

Publié : lun. 06/mars/2017 21:36
par djes
omega a écrit :@Djes
Je crois que ce n'est pas un bon exemple http://www.mon-navigateur.com)
J'aurais préféré que tu choisisses une page d'accueil qui contient des images et des textes qui bougent, c'est au niveau des sites de ce type que ça coince à mon niveau....
C'est pas moi, c'est kcc

Re: WebGadget avancé

Publié : lun. 06/mars/2017 22:31
par omega
Euh... Pardon

Re: WebGadget avancé

Publié : mar. 07/mars/2017 8:53
par Ar-S
djes a écrit :En fait, certains composants pourraient être intégrés, mais cela implique un développement spécifique très coûteux en temps, en énergie, en argent même. En outre, ils ne servent pas à tout le monde, et, pour une même fonctionnalité, il y a plusieurs choix possibles.
Je me demande si la clef ne se situe pas dans une plus grande facilité d'intégration de composants (avec peut-être une lib spécifique ou de nouveaux mots-clés), avec un dossier exemple dédié à cette tâche... :?:
Certes c'est surement du boulot dans l'un ou l'autre des cas mais le webgadget en l'état est de plus en plus obsolète. Vu qu'il fait partie de PB, le supprimer serait une régression donc autant lui donner une nouvelle jeunesse.
Peut être à ajouter dans la todo list de la team.

Re: WebGadget avancé

Publié : mar. 07/mars/2017 9:44
par Kwai chang caine
Ce que j'ai du mal à comprendre c'est que Fred avait sûrement du déjà faire ce travail du temps ou l'on pouvait mettre la constante FF dans webgadget
FF a évolué mais ya du se produire quelque chose de violent pour que Fred decide d'abandonner de mettre à jour pb en rapport de FF

Comme si demain on pouvait plus utiliser certaines lib qui sont plus ou moins incluses dans pb depuis un certain temps.
Peut être qu'a cette epoque FF a entièrement changé sa structure et ça faisait trop de boulot de le suivre.
Ou alors une histoire de licence, mais je pense pas..