Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre habitué
    Intégrer le navigateur Chromium (Chrome) dans une fenêtre Windev avec CefSharp
    Bonjour,

    Voici un petit tutorial expliquant comment intégrer le navigateur Chromium (Chrome) directement dans les fenêtres Windev, en lieu et place d'Internet Explorer et de l'activeX Shell.Explorer.
    Cela est rendu possible par l'utilisation de la librairie CefSharp (pour Chromium Embedded Framework) (https://github.com/cefsharp/CefSharp) et d'un champ Windev de type .NET 2.0 (WinForm).
    Les possibilités sont nombreuses et je ne présente donc ici que les fonctionnalités de base.

    1/Fichiers nécessaires

    Les sources pour Chromium en version 45 sont disponibles ici : https://mon-partage.fr/f/W22nIf8c/.
    Il faut copier tous les éléments dans le répertoire de votre exécutable, et dans le répertoire "Exe" de votre projet Windev pour le mode test.

    La dll WindevNet a été compilée par moi même pour permettre la récupération du résultat d'appels Javascript.

    Les autres dlls sont issues d'un projet Visual Studio (Community) de test de CefSharp, compilé avec la dernière version des packages disponibles.
    Des explications simples pour tester CefSharp avec Visual Studio sont disponibles ici : http://www.codeproject.com/Articles/1058700/Embedding-Chrome-in-your-Csharp-App-using-CefSharp.

    2/Intégration dans Windev

    Dans Windev, cliquez sur le menu Atelier/.NET/Utiliser un assemblage .NET dans votre projet.
    Dans la fenêtre listant les assemblages disponibles, cliquez sur le bouton "Parcourir" et sélectionnez les dlls "CefSharp.Core.dll", "CefSharp.WinForms.dll", "WDNetHelpers.dll" et "WindevNet.dll", présentes dans le répertoire "Exe" de votre projet.

    Dans la liste des assemblages, sélectionnez aussi l'assemblage "System.Windows.Forms".

    Cliquez sur le bouton de validation pour importer les dlls dans votre projet.

    2.1/Ajout du champ .NET 2.0 pour affichage du navigateur

    Insérez sur votre fenêtre Windev un champ .NET 2.0 (WinForm)
    Dans la description du champ, onglet "Général", sélectionnez la classe "System.Windows.Forms.Panel".

    2.2/Code d'initialisation de la fenêtre

    Dans le traitement d'initialisation de la fenêtre qui contient le champ .NET 2.0, ajoutez le code suivant, qui va permettre d'initialiser Cef et d'intercepter les événements du navigateur dans des procédures Windev.
    La liste des événements gérés n'est pas exhaustive, mais j'ai souhaité dans un premier temps mettre en place l'interception de ceux qui me paraissaient les plus importants.

    L'objet oWDJavascript va permettre d'intercepter l'événement de fin d'exécution asynchrone d'un code Javascript.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SI PAS Cef.IsInitialized ALORS
    	Cef.Initialize()
    FIN
    
    goBrowser est un ChromiumWebBrowser("http://google.com")
    
    goBrowser.add_AddressChanged(DotNetDélégué(AdressChanged,"EventHandler<CefSharp.AddressChangedEventArgs>"))
    goBrowser.add_ConsoleMessage(DotNetDélégué(ConsoleMessage,"EventHandler<CefSharp.ConsoleMessageEventArgs>"))
    goBrowser.add_IsBrowserInitializedChanged(DotNetDélégué(IsBrowserInitializedChanged,"EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>"))
    goBrowser.add_FrameLoadStart(DotNetDélégué(FrameLoadStart,"EventHandler<CefSharp.FrameLoadStartEventArgs>"))
    goBrowser.add_FrameLoadEnd(DotNetDélégué(FrameLoadEnd,"EventHandler<CefSharp.FrameLoadEndEventArgs>"))
    goBrowser.add_LoadError(DotNetDélégué(LoadError,"EventHandler<CefSharp.LoadErrorEventArgs>"))
    goBrowser.add_LoadingStateChanged(DotNetDélégué(LoadingStateChanged,"EventHandler<CefSharp.LoadingStateChangedEventArgs>"))
    goBrowser.add_StatusMessage(DotNetDélégué(StatusMessage,"EventHandler<CefSharp.StatusMessageEventArgs>"))
    goBrowser.add_TitleChanged(DotNetDélégué(TitleChanged,"EventHandler<CefSharp.TitleChangedEventArgs>"))
    
    oWDJavascript est un WindevNet.WDJavascript
    oWDJavascript:add_EvaluateJsDone(DotNetDélégué(EvaluateJsDone,"EventHandler<EvaluateJsDoneEventArgs>"))
    
    CAS EXCEPTION:
    	Erreur(ExceptionInfo(errComplet))


    2.3/Procédures de gestion des événements

    Dans la fenêtre Windev, il faut maintenant créer les procédures correspondantes à celles déclarées dans la fonction DotNetDélégué() de l'étape 2.2 soit :

    AdressChanged
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE AdressChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.AddressChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    ConsoleMessage
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCEDURE ConsoleMessage(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.ConsoleMessageEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    Trace(_oArgs.Line+" : "+_oArgs.Message)


    IsBrowserInitializedChanged
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE IsBrowserInitializedChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.IsBrowserInitializedChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    FrameLoadStart
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE FrameLoadStart(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.FrameLoadStartEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    FrameLoadEnd
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    PROCEDURE FrameLoadEnd(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.FrameLoadEndEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
     
    bMainFrame est un booléen
    bMainFrame = _oArgs.Frame.IsMain
    SI bMainFrame ALORS
    	Trace("#############################")
    FIN
    Trace("Main Frame ? : "+bMainFrame)
    Trace("Frame Url ? : "+_oArgs.Url)


    LoadError
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE LoadError(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.LoadErrorEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    LoadingStateChanged
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PROCEDURE LoadingStateChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.LoadingStateChangedEventArgs <utile>)
     
    //https://github.com/cefsharp/CefSharp/blob/master/CefSharp/LoadingStateChangedEventArgs.cs
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
     
    bIsLoading est un booléen
    bIsLoading = _oArgs.get_IsLoading()
    Trace("Loading : "+bIsLoading)


    StatusMessage
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE StatusMessage(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.StatusMessageEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    TitleChanged
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE TitleChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.TitleChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())


    EvaluateJsDone
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE EvaluateJsDone(_oWDJavascript est un WindevNet.WDJavascript <utile>,_oArgs est WindevNet.EvaluateJsDoneEventArgs)    
     
    Info(_oArgs.sResult)


    2.4/Fin d'initialisation de la fenêtre

    Dans le traitement de fin d'initialisation, copier le code suivant (WinForm1 est le nom du champ .NET 2.0) :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    goBrowser.Dock = DockStyle.Fill
    //WinForm1 est le nom du champ .NET 2.0
    WDHelpers.AddControlToControlCollection(goBrowser,WinForm1.Controls)
    MaFenêtre..Titre += " : "+Cef.ChromiumVersion +"-"+ Cef.CefVersion+"-"+Cef.CefSharpVersion


    2.5/Fermeture de la fenêtre

    Cef.Shutdown()

    3/Fonctions diverses

    Charger une URL :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    goBrowser.Load("http://google.com")


    Il est aussi possible d'accéder au DOM des documents et de le modifier à l'aide d'appels Javascript.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sJavascript est une chaîne = [
    	document.forms["%1"].submit();
    ]
    sFormNom est une chaîne
    sFormNom = "myform"
    sJavascript = ChaîneConstruit(sJavascript,sFormNom)
     
    WebBrowserExtensions.ExecuteScriptAsync(goBrowser,sJavascript)


    Récupérer le résultat d'une fonction Javascript :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    sJavascript est une chaîne
    sVal est une chaîne
     
    //Récupérer le contenu de la balise 'html' du document
    sJavascript = [
    document.getElementsByTagName('html')[0].innerHTML;
    ]
    EvaluateJsAsync(goBrowser,sJavascript)
    //La procédure Windev de gestion d'événement "EvaluateJsDone" est déclenchée lorsque le résultat est prêt.
     
    //Récupérer le contenu de tous les formulaires du document
    sJavascript = [
    (function() { 
    var elements = document.getElementsByTagName('form'); 
    var elementsList = ''; 
    for (var i = 0; i < elements.length; i++) { 
    	var element = elements[i]; 
    	elementsList += element.innerHTML; 
    	if (i < elements.length-1) 
    	{ 
    		elementsList += '<RC>'; 
    	} 
    } 
    return elementsList; })();
    ]
    EvaluateJsAsync(goBrowser,sJavascript)
    //La procédure Windev de gestion d'événement "EvaluateJsDone" est déclenchée lorsque le résultat est prêt.


    La procédure Windev "EvaluateJsAsync" :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE EvaluateJsAsync(_oBrowser est un ChromiumWebBrowser, LOCAL _sJavascript est une chaîne)
     
    oFrame est CefFrameWrapper dynamique <- WebBrowserExtensions.GetMainFrame(_oBrowser)
    oWDJavascript:EvaluateJsAsync(oFrame,_sJavascript,0)


    La procédure Windev "EvaluateJsDone" :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE EvaluateJsDone(_oWDJavascript est un WindevNet.WDJavascript <utile>,_oArgs est WindevNet.EvaluateJsDoneEventArgs)                         
     
    Info(_oArgs.sResult)


    Code C# de la dll WindevNet :

    Code c# :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    using CefSharp;
    using System;
    using System.Threading.Tasks;
     
    namespace WindevNet
    {
        public class EvaluateJsDoneEventArgs : EventArgs
        {
            public int iID { get; set; }
            public string sResult { get; set; }
            public Task<JavascriptResponse> JavascriptResponse;
        }
     
        public class WDJavascript
        {
     
            public event EventHandler<EvaluateJsDoneEventArgs> EvaluateJsDone;
     
            protected virtual void OnEvaluateJsDone(EvaluateJsDoneEventArgs e)
            {
                EventHandler<EvaluateJsDoneEventArgs> handler = EvaluateJsDone;
                if (handler != null)
                {
                    handler(this, e);
                }
            }
     
            public void EvaluateJsAsync(IFrame f, string sJavascript,int iID=0)
            {
                f.EvaluateScriptAsync(sJavascript).ContinueWith(t =>
                {
                    var Response = t.Result;
                    EvaluateJsDoneEventArgs args = new EvaluateJsDoneEventArgs();
                    args.iID = iID;
                    args.sResult = (string)Response.Result.ToString();
                    args.JavascriptResponse = t;
                    OnEvaluateJsDone(args);
                });
            }
     
        }
     
    }


    Code C# de test de CefSharp :

    Code c# :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    using System;
    using System.Windows.Forms;
    using CefSharp;
    using CefSharp.WinForms;
     
    namespace CefTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                InitBrowser();
            }
     
            public ChromiumWebBrowser browser;
     
            public void InitBrowser()
            {
                Cef.Initialize(new CefSettings());
                browser = new ChromiumWebBrowser("www.google.com");
     
                browser.IsBrowserInitializedChanged -= new EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>(IsBrowserInitialized);
                browser.IsBrowserInitializedChanged += new EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>(IsBrowserInitialized);
     
                browser.FrameLoadEnd -= new EventHandler<CefSharp.FrameLoadEndEventArgs>(FrameLoadEnd);
                browser.FrameLoadEnd += new EventHandler<CefSharp.FrameLoadEndEventArgs>(FrameLoadEnd);
     
                browser.ConsoleMessage -= new EventHandler<CefSharp.ConsoleMessageEventArgs>(ConsoleMessage);
                browser.ConsoleMessage += new EventHandler<CefSharp.ConsoleMessageEventArgs>(ConsoleMessage);
     
                this.Controls.Add(browser);
                browser.Dock = DockStyle.Fill;
            }
     
            private void IsBrowserInitialized(object sender, IsBrowserInitializedChangedEventArgs e)
            {
                if (e.IsBrowserInitialized)
                {
                    //Do something here
                }
            }
     
            public string EvaluateJsResponse;
     
            public void EvaluateJs(IFrame f, string Js)
            {
                f.EvaluateScriptAsync(Js).ContinueWith(x =>
                {
                    var response = x.Result;
                    if (response.Success && response.Result != null)
                    {
                        EvaluateJsResponse = (string)response.Result.ToString();
                        //Do something here (To interact with the UI you must call BeginInvoke)
                    }
                });
            }
     
            public void FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
            {
                if (e.Frame.IsMain)
                {
                    //string sJs = "document.getElementsByTagName('html')[0].innerHTML;";
                    string sJs = "(function() { var body = document.body, html = document.documentElement; return  Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); })();";
                    EvaluateJs(e.Frame, sJs);
                }
            }
     
            public void ConsoleMessage(object sender, ConsoleMessageEventArgs e)
            {
                Console.WriteLine(e.Message);
            }
     
        }
    }


    En cas de problèmes d'intégration dans Windev, la solution peut être souvent de supprimer le répertoire .NET de votre projet, de vider son répertoire de compilation <NomProjet>.cpl et de recompiler le projet.

    Merci aux intervenants de ce fil : http://www.developpez.net/forums/d1445453-2/environnements-developpement/windev/net-xaml-chromium-application-windev/ et à ochoteau en particulier pour les sources.

    Bonne prog

  2. #2
    Membre habitué
    System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly 'CefSharp.Core.dll'
    Attention, en cas d'erreur de ce type :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Que s'est-il passé ?
    Le framework .NET a renvoyé l'erreur suivante : 
    Une exception a été levée par la cible d'un appel.
     
    Code erreur : 200007
    Niveau : erreur fatale (EL_FATAL)
     
    Dump de l'erreur du module 'wd190net4.dll' (19.0.3.0).
    Identifiant des informations détaillées (.err) : 200007
    Informations de débogage :
    System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly 'CefSharp.Core.dll' ou une de ses dépendances. Le module spécifié est introuvable.
       à CefSharp.WinForms.ChromiumWebBrowser..ctor(String address)
       --- Fin de la trace de la pile d'exception interne ---
       à System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
       à System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       à CDotNetType.vpgcrInvokeConstructor(CDotNetType* , ConstructorInfo pclConstructorInfo, CSLevel* pclPile, Int32 nNbParamPile, STOperationDotNet* pstOperation)
       à CDotNetType.vpgcrInvokeConstructor(CDotNetType* , STMethodeDotNet* pstMethode, UInt32* pdwIdentifiant, CSLevel* pclPile, Int32 nNbParamPile, STOperationDotNet* pstOperation)
       à CDotNetInstance.bExecuteConstructeur(CDotNetInstance* , STMethodeDotNet* pstMethode, UInt32* pdwIdentifiant, CSLevel* pclPile, Int32 nNbParamPile, STOperationDotNet* pstOperation)
    Informations supplémentaires :
    EIT_DATEHEURE : 22/01/2016 09:22:37


    Pensez à installer les packages redistribuables Visual C++ pour Visual Studio 2013 sur le poste concerné :

    https://www.microsoft.com/fr-fr/download/details.aspx?id=40784

  3. #3
    Membre habitué
    Sources pour Chromium 47
    Voici les sources pour Chromium 47 :

    https://mon-partage.fr/f/CxgGgkXQ/

  4. #4
    Nouveau membre du Club
    MAJ des dépendances CefSharp & CEF
    Merci bastiencb, pour ce post explicatif et clair

    Pour la montée en version de Chromium, vous pouvez récupérer les dernières mises à jour ici :

    https://www.nuget.org/packages/CefSharp.Common/
    https://www.nuget.org/packages/CefSharp.WinForms/

    https://www.nuget.org/packages/cef.redist.x86/ ou https://www.nuget.org/packages/cef.redist.x64/
    /!\ prendre la bonne version vis à vis de ce qui est indiqué dans CefSharp.Common > Dependencies.

    NB : sur "Download" vous récupérez des fichiers ".nupkg", ce sont en fait des archives ZIP.
    Je vous laisse chercher dans les archives pour les DLLs

    Bons développements !

  5. #5
    Nouveau membre du Club
    Un très grand merci Bastien pour ton post !

  6. #6
    Membre expert
    Salut,

    Sauriez-vous si on peut utiliser CefSharp avec SharpDevelop ?

    Merci.

  7. #7
    Nouveau membre du Club
    Bien sûr, c'est une bibliothèque C# !
    A vous de prendre les bonnes DLLS si vous voulez programmez en WPF plutôt qu'en Windows Forms.

    De nombreux exemples sont disponibles sur le NET
    Dont sur le site du projet : https://github.com/cefsharp/CefSharp

  8. #8
    Membre expert
    Merci et +1.

    Pour ce qui est de github je dois bien reconnaitre que je n'y comprend rien, pour moi c'est un "bazard" où tout est mélangé... Je ne sais pas où sont les dll pour ceci ou cela ou bien quels sont les fichiers à utiliser pour mettre en œuvre tel ou tel exemple...

    Il me faut une formation rien que pour github... Ou bien un tuto clair...

  9. #9
    Nouveau Candidat au Club
    Win32 a cessé de fonctionner..
    Bonjour,
    Merci pour votre super tuto
    Néanmoins, j'ai un plantage à la ligne :
    Cef.Initialize()
    Win32 a cessé de fonctionner..
    Je suis sur Windev20, Windows10.
    Avez-vous une idée svp?

  10. #10
    Candidat au Club
    Appel procédure Windev
    Bonjour,

    est-il possible qu'une procédure Windev soit appelée par une fonction javascript de la page HTML ?

    autre chose, j'ai aussi eu un problème lors de l'implémentation des DLL dans mon projet, et la solution a été de passer sur les propriétés de toutes les DLL pour les débloquer

    merci

    Tiam

  11. #11
    Futur Membre du Club
    WDNetHelpers.dll
    Bonjour,

    merci pour ce post explicatif !
    Où trouve t'on la WDNetHelpers.dll et ses updates ? Merci

  12. #12
    Nouveau membre du Club
    WDNetHelpers.dll
    Dans les premiers liens de bastienc (Chromium 45) : https://mon-partage.fr/f/W22nIf8c/
    Ou dans mon pack Cefsharp 43 ou le dernier : Cefsharp 47 ou Miroirs

  13. #13
    Futur Membre du Club
    WDNetHelpers.dll
    Bonjour,
    Merci pour cette réponse rapide.
    J'ai besoin de déployer la version chromium 49.
    Est-ce qu'un update de cette DLL est nécessaire ?
    Les sources sont-elles libres ou propriétaire ?

    Merci

  14. #14
    Nouveau membre du Club
    Cefsharp est libre, à vous de mettre à jour :-)
    WDNethelpers n'a pas besoin d'être à jour, ni même requise !

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    gclBrowser est un CefSharp.WinForms.ChromiumWebBrowser(sURL)
    gclBrowser.Dock = DockStyle.Fill
    gclBrowser.Parent = DOTNET_NAVIGATEUR


    DOTNET_NAVIGATEUR étant un champ dotnet de type Winforms (System.Windows.Forms.WebBroser).

  15. #15
    Futur Membre du Club
    WDNetHelpers.dll
    D'accord
    Merci beaucoup

  16. #16
    Nouveau membre du Club
    Merci ochoteau pour ces informations.

    Concernant la partie Javacript, j'ai recompilé le source de Bastien et tout est OK en version 49 mais peut-on s'affranchir de la DLL WindevNet ?

    Si oui comment ? Je ne maitrise pas assez le .Net pour faire cela.

    Merci encore pour vos infos ...

  17. #17
    Membre du Club
    64 bits supporté ?
    Bonjour,

    Voila deux jours que je teste et cherche diverses solutions pour integrer dans une fenetre Windev 20 un éditeur HTLM digne de ce nom, sachant gérer les CSS (à lire sur un serveur).
    J'ai presque réussi avec XStandard, mais ses dll ActiveX ne sont dispo qu'en 32bits et je dois pouvoir distribuer mon appli aussi bien en 32 qu'en 64bits.

    Dans un des posts mentionné,qcq dit avoir pu intégrer l'éditeur CKEditor, dans une fnêtre Windev, grâce à l'inclusion du navigateur Chrome (avec une autre méthode que celle décrite ici, mais le principe reste le même : http://www.developpez.net/forums/d14...cation-windev/ ). Ce serait une solution géniale.

    Je viens de suivre le tuto, et ça fonctionne en 32 bits, j'ai bien Chrome qui s'ouvre dans une fenêtre, contenant CKEditor et après avoir lu la doc de CKEditor, j'ai compris comment lire et ecrire le contenu HTML du CkEditor depuis le code Windev et lui indiquer les css à utiliser. Genial.

    Mais j'ai un beau crash si j'execute l'appli en 64 bits, même en installant les dll 64 bits trouvé sur les liens mentionnés plus haut :

    Erreur à la ligne 4 du traitement Déclarations globales de fen_main.
    Vérifiez que le framework .NET est bien disponible sur la machine.
    Vérifiez que 'Visual Studio 2010 Redistributable Package' est installé sur la machine.
    Le chargement de la DLL wd200net4_64.dll a échoué

    Cette solution permet t'elle de compiler aussi bien une version 32 que 64 bits de l'application ?. Si oui, quelles dll installer ?

    D'avance merci.

    Crdlt
    Franck
    www.sitolog.com

  18. #18
    Membre habitué
    Citation Envoyé par lemazol Voir le message
    Merci ochoteau pour ces informations.

    Concernant la partie Javacript, j'ai recompilé le source de Bastien et tout est OK en version 49 mais peut-on s'affranchir de la DLL WindevNet ?

    Si oui comment ? Je ne maitrise pas assez le .Net pour faire cela.

    Merci encore pour vos infos ...
    Oui, il est possible de ne pas l'utiliser.

    Je l'ai écrite pour permettre la récupération du résultats d'appels Javascripts dans une procédure Windev, mais elle n'est absolument pas obligatoire.

  19. #19
    Nouveau membre du Club
    Merci Bastien pour ta réponse.

    Entre temps, j'ai bossé sur le .net et j'ai donc développé ma propre DLL pour que cela fonctionne comme je le voulais.

    Le problème est que sans librairie d'interfacage ... tu ne vas pas bien loin au niveau des fonctionnalités.

    En tout cas, ton explication a été une très bonne base, merci.

    Citation Envoyé par bastiencb Voir le message
    Oui, il est possible de ne pas l'utiliser.

    Je l'ai écrite pour permettre la récupération du résultats d'appels Javascripts dans une procédure Windev, mais elle n'est absolument pas obligatoire.

  20. #20
    Membre du Club
    Comment faire ce tuto pour une appli 64bits
    Bonjour,

    Je me permet de re-soumettre ma question, car je ne trouve vraiment pas comment m'y prendre :

    J'ai réussi à suivre ce tuto (hyper clair, merci) pour ajouter Chromium dans une de mes appli, afin d'y inclure CK Editor. Tout marche bien en 32 bits.

    Mais je dois livrer mon appli en version 32 et 64 bits. Je n'arrive pas à trouver quels fichiers inclure en 64 bits. En espérant que ce soit possible, sinon je suis marron.

    Merci pour votre aide
    Franck