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

Composants VCL Delphi Discussion :

[TWebBrowser] Sélection et double-clic


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut [TWebBrowser] Sélection et double-clic
    Question sans doute pas très facile à répondre.

    Comment sélectionner un mot dans une page affichée par un TWebbrowser et envoyer à cette dite page un double-clic (qui déclenche un script java)?

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    La theorie par rappor à ce qu je connais en VB...
    Une fois ta page ouverte , tu as un objet HTMLDocument
    TWebbRowser.Document ...

    tu peu parcourir les éléments ( HTMLDTElement..) contenues dans
    TWebbrowser.Document.All ou pour limiter un peu tu peu utiliser .DOcument.getElementsByTagName("A") qui limite au balise <A> et t'arreter sur l'élément dont la priorité innerText est égale au texte sur lequel tu désire cliquer ensuite tu applique la méthode Click sur cet élément ....


    PS : Je débute en Delphi ... et je ne trouve pas le composant TWebbbrowser ... il n'est pas dasn ma boite à outils ( pas de catégorie Internet ...) ? comment le rajouter ?



  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Par défaut
    Un exemple pour compléter la suggestion.

    On suppose une page avec un formulaire comportant deux zones de saisie et un bouton.

    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
     
    procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);
    var iDoc: IHtmlDocument2;
      i: integer;
      ov: OleVariant;
      iDisp: IDispatch;
      iColl: IHTMLElementCollection;
      iInputElement: IHTMLInputElement;
     
    begin
     
      WebBrowser1.ControlInterface.Document. QueryInterface(IHtmlDocument2, iDoc);
      if not assigned(iDoc) then begin
        ShowMessage(' !!!??? Aucun chargement ... ');
        Exit;
      end;
      ov := 'INPUT';
      IDisp := iDoc.all.tags(ov);
      if assigned(IDisp) then begin
        IDisp.QueryInterface(IHTMLElementCollection, iColl);
        if assigned(iColl) then begin
          for i := 1 to iColl.Get_length do begin
            iDisp := iColl.item(pred(i), 0);
            iDisp.QueryInterface(IHTMLInputElement, iInputElement);
            if assigned(iInputElement) then begin
              if iInputElement.Get_name = 'login'
               // Champ de saisie d'un login ,nommé login en javascript
              then iInputElement.Set_value('toto');
              if iInputElement.Get_name = 'passwd'
                // Champ de saisie d'un pass ,nommé passwd en javascript
              then iInputElement.Set_value('1234567890');
                //Déclenchement d'un bouton nommé save qui balance un submit
              if iInputElement.Get_name = '.save'
                then iInputElement.Get_form.submit;
     
                //  Envoie le titre de la page courante dans la barre de titre
                Caption := Webbrowser1.OleObject.Document.Title
            end;
          end;
        end;
      end;
    end;
    Une précision cela marche très bien sauf pour élément de type input file javascript, il est impossible de forcer la valeur par un nom de fichier envoyé à la volée. C'était mon problème et en m'inspirant de la FAQ ( section Indy ) j'ai trouvé une autre solution.

    Il n'y a plus de formulaire html, le formulaire est une form Delphi et j'envoie toutes les variables y compris le chemin du fichier à uploader sur le serveur Web. Cela marche nickel...

    Amitiés à tous

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Citation Envoyé par giloutho
    Un exemple pour compléter la suggestion.

    On suppose une page avec un formulaire comportant deux zones de saisie et un bouton.

    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
     
    procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);
    var iDoc: IHtmlDocument2;
      i: integer;
      ov: OleVariant;
      iDisp: IDispatch;
      iColl: IHTMLElementCollection;
      iInputElement: IHTMLInputElement;
     
    begin
     
      WebBrowser1.ControlInterface.Document. QueryInterface(IHtmlDocument2, iDoc);
      if not assigned(iDoc) then begin
        ShowMessage(' !!!??? Aucun chargement ... ');
        Exit;
      end;
      ov := 'INPUT';
      IDisp := iDoc.all.tags(ov);
      if assigned(IDisp) then begin
        IDisp.QueryInterface(IHTMLElementCollection, iColl);
        if assigned(iColl) then begin
          for i := 1 to iColl.Get_length do begin
            iDisp := iColl.item(pred(i), 0);
            iDisp.QueryInterface(IHTMLInputElement, iInputElement);
            if assigned(iInputElement) then begin
              if iInputElement.Get_name = 'login'
               // Champ de saisie d'un login ,nommé login en javascript
              then iInputElement.Set_value('toto');
              if iInputElement.Get_name = 'passwd'
                // Champ de saisie d'un pass ,nommé passwd en javascript
              then iInputElement.Set_value('1234567890');
                //Déclenchement d'un bouton nommé save qui balance un submit
              if iInputElement.Get_name = '.save'
                then iInputElement.Get_form.submit;
     
                //  Envoie le titre de la page courante dans la barre de titre
                Caption := Webbrowser1.OleObject.Document.Title
            end;
          end;
        end;
      end;
    end;
    Une précision cela marche très bien sauf pour élément de type input file javascript, il est impossible de forcer la valeur par un nom de fichier envoyé à la volée. C'était mon problème et en m'inspirant de la FAQ ( section Indy ) j'ai trouvé une autre solution.

    Il n'y a plus de formulaire html, le formulaire est une form Delphi et j'envoie toutes les variables y compris le chemin du fichier à uploader sur le serveur Web. Cela marche nickel...

    Amitiés à tous
    Merci pour ta réponse mais mon mot à sélectionner n'est pas un élément de formulaire mais un simple mot. Je veux le sélectionner et envoyer un double-clic dessus.

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par sfpx
    mon mot à sélectionner n'est pas un élément de formulaire mais un simple mot. Je veux le sélectionner et envoyer un double-clic dessus.
    la procédure que je t'ais soumise c'est un simple click ... malheureusement je ne connais pas assez Delphi ..pour t'envoyer un code fonctionnell ...déjà je bute sur ce controle TWwebbrowser que je ne trouve pas ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    Mon twebbrowser est dans mon onglet Internet.
    Peut-ête dois-tu importer l'activeX? Je ne me souviens pas.

    J'ai trouvé la moitié de ma solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure tform1.selectword(lemot:widestring);
    var selection:IHTMLSelectionObject;
    textrange:IHTMLTxtRange;
    begin
    selection:=(webbrowser1.document as IHTMLDocument2).selection;
    TextRange := Selection.CreateRange as IHTMLTxtRange;
    textrange.findtext(lemot,length(lemot),0);
    textrange.select;
    end;
    Ça marche très bien pour sélectionner le mot de mon choix.
    Me reste maintenant à envoyer un double-clic sur la page (ça peut être n'importe-où c'est pas important).

    Qqun sait?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Par défaut
    sendmessage(webbrowser1.handle,WM_LBUTTONDBLCLK,0,0);

    ne marche pas.

    En fait je crois que finalement le double-clic doit être fait sur le mot.
    Plus ça va plus je crois que je devrai procéder autrement.

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon pour le double click .. j'ai pas trouver mais pour un click simple sur um mot ... par exemple le mot images de la page d'acceuil google...

    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
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    WebBrowser1.Navigate('www.google.fr')
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i : Integer;
     
    begin
      for i:=0 to Webbrowser1.OleObject.Document.anchors.Length-1 do  begin
        if Webbrowser1.OleObject.Document.anchors.Item(i).InnerText = 'Images' then
                  Webbrowser1.OleObject.Document.anchors.Item(i).Click  ;
        end ;
      end;
    end.

Discussions similaires

  1. [XL-2007] Sélection d'une cellule par double clic et ouverture du détail ds listbox
    Par ericmicro dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 31/05/2013, 10h43
  2. Sélection avec double clic
    Par cmail dans le forum IGN API Géoportail
    Réponses: 4
    Dernier message: 23/04/2012, 10h36
  3. ListBox, Cases à cocher et Double-Clic
    Par Loïc dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/02/2005, 10h18
  4. Ouvrir un fichier sur un double-clic dans une TListBox
    Par SegmentationFault dans le forum Composants VCL
    Réponses: 4
    Dernier message: 09/08/2004, 17h22
  5. [débutant] Listview et double-clic
    Par Runlevel dans le forum C++Builder
    Réponses: 12
    Dernier message: 29/06/2004, 19h44

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