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

Delphi Discussion :

Pilotage OLE IE: modifier champ de formulaire


Sujet :

Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Pilotage OLE IE: modifier champ de formulaire
    Bonjour à tous,

    malgré mes recherches nombreuses sur le sujet, je n'ai pas trouvé beaucoup d'info sur le pilotage d'Internet Explorer via Delphi.

    Je sais récupérer un formulaire et l'envoyer, mais je n'arrive pas à remplir automatiquement les champs via delphi...

    Voici mon code:

    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
     
    var
      IE: OLEVariant;
    begin
      IE := CreateOleObject('InternetExplorer.Application');
      IE.Visible := true;
      IE.Navigate('http://mypage.com/mypage.html');
     
      while Cardinal(IE.readyState) <> 4 do sleep(1000);
     
      ShowMessage(IE.Document.Forms.Item(0).id); // ID du formulaire
     
      { Comment modifier le contenu du champ 'toto' de ce formulaire?
         (évidemment, ce code ne fonctionne pas) }
      IE.Document.Forms.Item(0).Field(0).text := 'aValue';
     
      // Envoi des données
      IE.Document.Forms.Item(0).submit;
      ...
    end;
    Une idée? ou alors un bon lien vers de la bonne doc?

    Merci!

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Petite technique que j'utilise assez souvent pour la gestion de formulaire

    souvent tu as ça en code html/php

    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
    <form name="form1" method="Post" action="http://MonSite.com/MaPage.php">
        <table width="400"  border="0" align="left" cellpadding="0" cellspacing="0">
          <tr>
            <td width="30%" height="28">
              <div align="left">
                Id Client :
              </div>
            </td>
            <td width="70%" height="28">
              <div align="left">
                <input name="id_client" type="text" id="id_client" value="">
              </div>
            </td>
          </tr>
    
          <tr>
            <td width="30%" height="28">
              <div align="left">
                Divers :
              </div>
            </td>
            <td width="70%" height="28">
              <div align="left">
                <input name="divers" type="text" id="divers" value="">
              </div>
            </td>
          </tr>
        </table>
      <p align="center">
        <input type="submit" name="Button" value="Envoyer" onClick="this.disabled=true;">
      </p>
    </form>
    Dans un cas comme celui la il te suffit de récuperer l'url en rouge, et les nom de variable en bleu.
    Après il te reste plus qu'a :

    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
     
    var
      lst : TStringList;
      strPostData: string;
      URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
      i : integer;
    begin
      lst := TStringList.create;
      try
        lst.Add('Id_client = toto');
        lst.add('Divers = 'test');
        strPostData := '';
        for i := 0 to lst.Count -1 do
          strPostData := strPostData + lst.Strings[i] + '&';
        strPostData := Copy(strPostData,1,Length(strPostData) -1);
        PostData :=  VarArrayCreate([0, Length(strPostData) - 1], varByte);
        for I := 0 to Length(strPostData) -1 do
          PostData[I] := Ord(strPostData[i+1]);
     
        Url := 'http://MonSite.Com/MaPage.php';
        Flags := 0;//EmptyParam;
        TargetFrameName := 0;//EmptyParam;
        Headers := 'Content-Type: application/x-www-form-urlencoded'#13#10;
     
        WebBrowser1.Navigate2(URL, EmptyParam, EmptyParam, PostData, Headers);
      finally
        lst.Free;
      end;
    end;
    A adapter selon tes besoins ^^

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    OK, pas mal, j'arrive à poster mes données, mais ce que j'aurais préféré, c'est un "vrai" pilotage de IE, et ne pas me cantoner à l'affichage du résultat dans une fenêtre de mon appli... Imagine si le gars veut mettre la page dans ses bookmarks, ou si la page contient une applet java, ou d'autre cas plus spécifiques...

    Mon but actuel étant de simplifier la procédure de connexion au site "logmein" pour mes clients... qui souvent sont des billes en info, et qui mettent autant de temps à me fournir une connexion en télémaintenance que moi à réparer leurs problèmes....

    Une autre idée pour affecter automatiquement un champ de formulaire dans IE?


  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Mission accomplie... Merci

    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
     
    { Ouvre Internet Explorer, se connecte au site "www.logmein123.com", insère le
      PIN Code passé en paramètre dans le champ adéquat et poste le
      formulaire.
     
      Retourne true si la procédure a été remplie sans rencontrer de problème,
      false sinon.
    }
     
    function ConnectIEToLogMeIn(pinCode: string): Boolean;
    var
      IE, ovElements: OLEVariant;
      i, m: Integer;
    begin
      Result := false;
     
      try
        IE := CreateOleObject('InternetExplorer.Application');
        IE.Visible := true;
        IE.Navigate('https://secure.logmeinrescue.com/Customer/Code.aspx');
     
        //Attendre que la page soit complètement chargée
        while Cardinal(IE.readyState) <> 4 do sleep(1000);
     
        for m := 0 to IE.Document.forms.Length - 1 do
        begin
          if IE.Document.Forms.Item(m).Id = 'Form1' then
          begin
            ovElements := IE.Document.Forms.Item(m).Elements;
     
            for i := 0 to ovElements.Length - 1 do
              if (CompareText(ovElements.Item(i).TagName, 'INPUT') = 0) and (ovElements.Item(i).Id = 'Code') then
                ovElements.item(i).Value := pinCode;
     
            IE.Document.Forms.Item(0).submit;
            while Cardinal(IE.readyState) <> 4 do sleep(1000);
          end;
        end;
        Result := true;
      except
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier champ de formulaire
    Par ladinho58 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/01/2012, 18h02
  2. [VB.NET] pilotage word : champ de formulaire
    Par Kropernic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/07/2006, 12h15
  3. modifier champs formulaire depuis object
    Par nin47 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/04/2006, 09h51
  4. Réponses: 5
    Dernier message: 30/09/2005, 16h42
  5. [Zope] modifier un champ de formulaire d´un dtml_doc
    Par naiadeKaren dans le forum Zope
    Réponses: 1
    Dernier message: 17/08/2005, 13h31

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