IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C++Builder Discussion :

TWebBrowser [Non suivi]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Par défaut TWebBrowser
    bonjour,

    voilà, jutilise un TWebBrowser contenant une page que j'ai faite en fireworks( fmille macromedia), cette dernière contient plusieurs bouttons.
    j'ai réussi jusque là a la placer dans ma form principale de mon application.

    le big problème qui me reste à résoudre et auxquelles jen'arive pas a trouver une solution rapidement est de pouvoir faire communiquer ces bouttons avec mes autres forms (ex: si je clique sur l'un des bouttons je vois apparaitre la form2).

    mes remerciements anticipés

  2. #2
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Pour accéder à une autre forme, il faut inclure l'en-tête d'unité de la forme avec laquelle on veut communiquer.

    Si vous avez deux fiches Form1 et Form2, par défaut vous ne pouvez pas les faire communiquer car elles ne se "connaissent" pas si l'on peut dire c'est-à-dire qu'Unit1 ne connaît pas la classe TForm2 et réciproquement Unit2 ne connaît pas la classe TForm1. Quand vous êtes dans Unit1, il faut faire Fichier->inclure l'en-tête d'unité (ou Alt-F11) et choisir Unit2 dans la liste. Dans notre exemple, comme on n'a que deux unités, C++ Builder ne proposera qu'Unit2 qui est la seule possibilité d'include. Cela a pour effet d'écrire au début du programme :

    Vous pouvez tout aussi bien le faire à la main dans le listing mais C++ Builder a simplement prévu de vous simplifier la vie sur ce point. Ainsi, après avoir procédé à cet include par le moyen de votre choix, si maintenant Unit1 appelle Form2 avec une instruction du type Form2->, ce sera possible, par exemple vous pourrez écrire Form2->Visible=true dans Unit1 car Unit1 connaît, par cet include, la classe TForm2. Et chaque fois qu'Unit1 appellera Form2, il faut préfixer l'appel par Form2->. Réciproquement, si Form2 veut accéder à Form1, il faudra depuis Unit2 inclure l'en-tête d'unité Unit1. Et il en sera de même pour toute unité accédant à une autre unité.

    À bientôt
    Gilles

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Merci Gilles Louïse pour cette explication, qui est d'ailleurs présente dans la FAQ, mais je crois que le problème est de déclencher des évenements comme typiquement ouvrir une autre Form à partir de clicks dans l'animation ou la page Fireworks.

    Je ne connais pas ce produit autrement que de nom, mais génère-t-ilune page html ou une animation de type flash ?

    Cordialement,

    Arnaud

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Par défaut
    oui, il génère une page html, on peux aussi éventuellement l'exporter en tant que fichier flash.

    mais dans mon cas je les laisser autant qu'une page html, que j'aimerai grace aux bouttons contenant dans cette page accerder aux autres forms de mon applications d'un simple clique sur les différents bouttons.

    merci

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Par défaut
    merci madfu, mais j'ai plus besoin d'installer un activex puisque j'airéglé une partie du problème, j'ai opté pour l'utilisation d'un TWebBrowser, donc j'ai pu importer ma page html, et le problème qui reste et de pouvoir faire communiquer les bouttons qui sontdans ma page html se trouvant dans ma form principal et les autres forms de mon application.

    ah que c'est dur de communiquer, mais essayons quand même!!

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Bonjour,

    Je vois deux pistes :
    • solution bourrine : déclencher des chargements de pages lors de clicks sur les boutons (éventuellement la même), et détecter grâce aux événements du TCppWebBrowser la fin du téléchargement d'une URL, pour réaliser une action suivant l'URL en question.
    • solution élégante : brancher un objet COM en tant qu'external de ton TCppWebBrowser, et l'appeler par du code javascript (window.external.tamethodequiouvreunefiche). Je sais juste que c'est possible, mai sje ne l'ai jamais fait. Je peux donc juste te fournir un point d'entrée : IDocHostUIHandler
    Je suis très intéressé par un retour si tu choisis la seconde solution, car elle pourrait intéresser beaucoup de monde.

    Edit : voilà un petit code en C# qui réalise le genre de chose que tu souhaites faire. Cela peut te fournir également un vision de comment le système fonctionne et de ce que tu peux en faire :
    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
    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 System.Security.Permissions;
     
     
     
    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public class Form1 : Form
    {
        private WebBrowser webBrowser1 = new WebBrowser();
        private Button button1 = new Button();
     
     
     
        [STAThread]
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
     
     
     
        public Form1()
        {
            button1.Text = "call script code from client code";
            button1.Dock = DockStyle.Top;
            button1.Click += new EventHandler(button1_Click);
            webBrowser1.Dock = DockStyle.Fill;
            Controls.Add(webBrowser1);
            Controls.Add(button1);
            Load += new EventHandler(Form1_Load);
        }
     
     
     
        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.AllowWebBrowserDrop = false;
            webBrowser1.IsWebBrowserContextMenuEnabled = false;
            webBrowser1.WebBrowserShortcutsEnabled = false;
            webBrowser1.ObjectForScripting = this;
            // Uncomment the following line when you are finished debugging.
            //webBrowser1.ScriptErrorsSuppressed = true;
     
     
     
            webBrowser1.DocumentText =
                "<html><head><script>" +
                "function test(message) { alert(message); }" +
                "</script></head><body><button " +
                "onclick=\"window.external.Test('called from script code')\">" +
                "call client code from script code</button>" +
                "</body></html>";
        }
     
     
     
        public void Test(String message)
        {
            MessageBox.Show(message, "client code");
        }
     
     
     
        private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("test",
                new String[] { "called from client code" });
        }
     
     
     
    }
    A bientôt,

    Arnaud

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 109
    Par défaut
    d'accord,mais avant: juste une dernière question, est il possible de faire communiquer ces deux sources (c++ et fireworks)?

    si c'est le cas alors je suis prete a relever le défi.

    a trés bientot de mes nouvelles

    "ils ne savaient pas que c'était impossible alors ils l'ont fait."

Discussions similaires

  1. TWebBrowser créé dans un objet.
    Par Speed41 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/11/2003, 10h34
  2. code html en ram -> TWebBrowser pour affichage
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/04/2003, 22h55
  3. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  4. [TWebBrowser] ... et l'historique de I.E.
    Par Frederic dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/10/2002, 18h53
  5. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo