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 :

Existe-t-il une possibilité de remplir un champ HTM depuis Delphi ?


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Existe-t-il une possibilité de remplir un champ HTM depuis Delphi ?
    Bonjour à toutes et à tous,

    Depuis mon application de surveillance par WebCam, j'ai ajouté un module qui me permet de configurer ma BBox2 (modem Belgacom !);

    Il y a peu de temps, Belgacom par souci de sécurité, a ajouté un champ afin de rentre le n° d'identification du modem.

    Comme c'est toujours le même lien concernant ce modem et même numéro du modem de celui qui utilise l'application, serait t'il possible de le faite automatiquement.

    A toutes fin, voici le lien de la BBox2 : http://192.168.1.1/

    Merci d'avance.

    @+,

    Cincap

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Il s'agit de remplir un formulaire et de le renvoyer au serveur, il y a dans la FAQ de quoi traiter le problème (exemple avec un composant Indy).

    Comment valider un formulaire ne contenant que des données textuelles avec la méthode POST ?
    Philippe.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Ph. B., merci de ta réponse, j'avais vu ce post avant mon topic, mais mon test n'était pas concluant, j'avais chargé ma page dans le TWebBrowser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TFWeb.BValidationClick(Sender: TObject);
    {Navigate permet de charger une page. Cette page peut être une page HTML }
    {mais aussi un fichier Excel, Word, un JPG GIF etc...                    }
    begin
      try WebBrowser1.Navigate(ComboBoxURL.Text,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
        ComboBoxURL.Items.Add(ComboBoxURL.Text); // rajoute l'URL de la page dans les Items du ComboBox
      except end;
    end;
    Ensuite, j'affichai la source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    procedure TFWeb.BAfficherClick(Sender: TObject);
    // permet d'afficher la source HTML
    begin
      FormTest.show;
      try
        FormTest.RE_Test.Text := WebBrowser1.OleObject.Document.body.innerHTML;
      except end;
    end;
    Et après, calage.

    @+,

    Cincap

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaiLeTroll, merci de ta réponse, j'ai une erreur sous D6 (identificateur non déclaré), y a t'il une référence à mettre dans le Uses de ma fiche ?

    Sinon, j'ai suivi ton lien et je l'examine.

    @+,

    Cincap

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    le uses de IHTMLElement ça doit être SHDocVw et MSHTML (...\Source\Internet)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaileTroll, voiçi ce que j'ai dans le "Uses" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, OleCtrls, ToolWin, ComCtrls, ComObj, {SHDocVw_TLB,} SHDocVw_TLB,
      IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
    Quand je rajoute "MSHTML", il m'indique qu'il ne trouve pas son fichier "MSHTML.dcu".

    Merci quand même.

    @+,

    Cincap

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As-tu le fichier "...\Borland\Delphi6\Source\Internet\mshtml.pas" ?
    J'ai une version Pro et j'ai ce fichier qui contient presque 200 interfaces
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaileTroll,

    As-tu le fichier "...\Borland\Delphi6\Source\Internet\mshtml.pas" ?
    Non je n'ai même pas le dossier "Internet" peut être à cause de la version de Delphi, car c'est la version gratuite et je n'ai pas non plus les composans Db...

    Dans le dossier "Imports" j'ai :

    SHDocVw_TLB.dcr
    SHDocVw_TLB.dcu
    SHDocVw_TLB.pas
    Pour le moment, je copie de mon application la clé dans le presse papier et une fois dans le champ, je fait un Ctrl+V.

    Il y a mieux me semble t'il.

    @+,

    Cincap

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Essaye d'importer "C:\WINNT\System32\mshtml.tlb" ou "C:\WINDOWS\system32\mshtml.tlb"
    Tu as la DLL mshtml.dll qui avec évidemment

    mshtml.pas et SHDocVw.pas sont des fichiers importés pré-inclus dans la version Pro
    J'avais réimporte SHDocVw_TLB et mshtml_TLB en Delphi 3 qui les fournissait pas par défaut
    Avec des directives, je gérais mon WebBrowser aussi bien en D3 qu'en D7 : Afficher page HTML dans Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaileTroll, bonsoir, merci pour l'info, j'ai essayé mais trop d'erreurs au niveau de la compil (voir fichier).

    A moins que je m'y prend mal pour l'import !

    Je suis sous Seven 64bits mais cela tu le sais bien.

    @+,

    Cincap
    Fichiers attachés Fichiers attachés

  12. #12
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Pas problème travail en variant ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Document.All.ID_Champ.Value := 'text'

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Montor, merci pour ton aide mais aprés test, cela ne fonctionne pas.

    Avec ce code, je suis arrivé à une solution mais comme le nom du champ ou je dois rentrer l'identité du modem, varie à chaque chargement de la page, j'ai utilisé un Tedit pour le vérifier à l'appel du code source de ce champ.

    Code html ou se trouve le champ à remplir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TD class=libelle>Serial Number (S/N)</TD>
    <TD class=field><INPUT style="WIDTH: 150px" name=password_351490872 maxLength=64 value="" type=password><INPUT name=md5_pass type=hidden> </TD>
    Code Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WebBrowser1.OleObject.Document.getElementById(Edpass.text).Value :='iddumodem';
    Si quelqu'un à une idée pour contrer cette modif du nom, je suis preneur.

    Edit : le nom du champ commence toujours par "password_"

    @+,

    Cincap

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    Bon, j'ai trouvé et je marque "Résolu", merci à tous.

    J'ai en effet regardé le code source de cette page et le code du name qui change se trouve déjà sur un autre champ id non visible au dessus du champ accessible qui permet de rentrer l'id du modem.

    Je n'ai qu'à reprendre cette valeur et rajouter avant "password_".

    @+,

    Cincap

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par cincap Voir le message
    Je suis sous Seven 64bits mais cela tu le sais bien.
    Euh, non, difficile de se rappeler de la configuration des tous les membres du forum, même si ils sont très présent !


    Pour tes erreurs, déjà ton fichier généré semble colossale, celui de D6 ne fait que 27000 et celui de XE2 34500 !
    Certaines fonctions en erreur sont pourtant les méthodes des interfaces et d'autres semble plutôt être lié au MediaPlayer, ta version de IE doit être élevé (moi j'ai encore la 6)
    Peut-être un mauvais transtypage dans les CoClass (erreur du générateur ?)

    Mais comme le suggère Montor, reste en OleVariant pour utiliser les interfaces en LateBinding, prévoit d'avoir la MSDN à portée de main !


    GetElementByID ne fonctionne pas sur la propriété NAME mais ID, tu dois coder ta fonction GetElementByName dont voici la variante C++Builder en LateBinding, seul le QueryInterface te posera problème, en LateBinding pure, j'ignore comme cela s'écrit !

    Voir aussi getElementsByTagName
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaiLeTroll, merci du suivi, par contre :

    GetElementByID ne fonctionne pas sur la propriété NAME mais ID
    Dans une procédure de test, avec ce code, je trouve la valeur "Name" du champ non visible (ou se trouve la clé qui vient d'être créée automatiquement) et ensuite la valeur "Name" du champ visible ou je dois rentrer l'id du modem.

    Test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TFWeb.BIdClick(Sender: TObject);
    begin
    //session_id
    Edpass.Text:= 'password_' + WebBrowser1.OleObject.Document.getElementById('session_id').Value  ; //session_id n'est pas visible !
    end;
     
    procedure TFWeb.BIdmodemClick(Sender: TObject);
    begin
    WebBrowser1.OleObject.Document.getElementById(Edpass.text).Value := Edidmodem.text; //Je rentre l'id de mon modem !
    end;
    Donc cela fonctionne bien sur la valeur "Name" du champ et dans mon cas c'est ok.

    Edit : Tu as raison, c'est bien sur l'id cela dépend l'interprétation

    @+,

    Cincap

  17. #17
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ ShaiLeTroll, merci du suivi, par contre :



    Dans une procédure de test, avec ce code, je trouve la valeur "Name" du champ non visible (ou se trouve la clé qui vient d'être créée automatiquement) et ensuite la valeur "Name" du champ visible ou je dois rentrer l'id du modem.

    Test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TFWeb.BIdClick(Sender: TObject);
    begin
    //session_id
    Edpass.Text:= 'password_' + WebBrowser1.OleObject.Document.getElementById('session_id').Value  ; //session_id n'est pas visible !
    end;
     
    procedure TFWeb.BIdmodemClick(Sender: TObject);
    begin
    WebBrowser1.OleObject.Document.getElementById(Edpass.text).Value := Edidmodem.text; //Je rentre l'id de mon modem !
    end;
    Donc cela fonctionne bien sur la valeur "Name" du champ et dans mon cas c'est ok.

    Edit : Tu as raison, c'est bien sur l'id cela dépend l'interprétation

    @+,

    Cincap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
     v:Variant;
    begin
      v:= WebBrowser1.Document;
      V.All.(nom de champ).value := 'text';

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Montor, merci aussi de ta suggestion, mais je n'arrive pas à avoir le résultat escompté, car lors de la compil puis essai j'ai une erreur sans avis.

    J'avais déjà enlever le point de trop mais......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var
     v:Variant;
    begin
      v:= WebBrowser1.Document;
      V.All(nom de champ).value := 'text';
    Si tu as une idée du pourquoi !

    Le nom de mon champ est 'session_id' et la value doit être récupérée dans le Tedit "Edpass".

    @+,

    Cincap

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

Discussions similaires

  1. [AC-2003] Appeler un module pour traiter une date et remplir un champ
    Par ostrich95 dans le forum Modélisation
    Réponses: 5
    Dernier message: 26/03/2014, 12h35
  2. [AC-2010] Remplir des champs étiquettes depuis une requete
    Par Gautch dans le forum IHM
    Réponses: 5
    Dernier message: 21/03/2014, 09h36
  3. Lambert 93 : existe-t-il une possibilité pour redresser le maillage ?
    Par saxrub dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 09/01/2013, 11h45
  4. Réponses: 3
    Dernier message: 20/05/2008, 11h22
  5. Réponses: 9
    Dernier message: 08/08/2007, 13h56

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