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 :

Probleme avec Webbrowser


Sujet :

Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut Probleme avec Webbrowser
    bonjour,

    je cherche à imprimer une page web à partir de webbrowser. alors j'ai cree une webbrowser dans ma forme et j'ai met le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WB.Navigate(site);
     
    while WB.ReadyState < READYSTATE_COMPLETE do
      Application.ProcessMessages;
     
    WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
    ce code fonctionne bien et sans problème, mais puisque je cherche à imprimer à partir d'une application console, bein j'ai modifié mon code pour creer le webbrowser dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WB := TWebBrowser.Create(Application);
    et la, 2 mauvaises surprises :
    1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while WB.ReadyState < READYSTATE_COMPLETE do
    boucle à l'infini
    2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
    provoque une exception : "Tentative de révocation d'une cible de dépôt qui n'a pas été enregistrée"

    quelqu'un a une idée d'où est ce que ces problèmes peuvent venir?

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    je crois que je commence à identfier le problème. En fait pour que ca fonctionne il fallait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WB := TWebBrowser.Create(Self);
    TOleControl(WB).Parent := Self;
    mais cela ne fonctionne pas dans une application console! en gros il ne connait pas 'Self'!! et j'ai essayé de la remplacer par autre chose genre 'nil' ou 'Application' mais ca ne fonctionne pas!

    quelqu'un a une idée??

  3. #3
    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
    Par défaut
    Reprend ton code non dynamique et note toutes les propriétés déclarées dans le fichier DFM (ouvrir comme texte pour le lire).
    Ensuite, crée ton objet dynamique et redéfini ces mêmes propriétés...
    Au final, tu retrouveras les mêmes caractèristiques.

    Mais en fait, j'ai pas bien compris ton but...
    Si tu veux juste cacher la fenêtre, tu peux aussi utiliser Form1.Hide, non ?
    Quel est l'objectif d'une appli console dans ton cas ? Tu veux afficher des infos dans la console ?

    Tu savais aussi que IE est capable d'imprimer avec un simple ShellExecute ? Par contre, je n'ai jamais réussi à imprimer et que IE caché. Apparemment, il faut que la page soit affichée pour être imprimée...
    De retour parmis vous après 10 ans!!

  4. #4
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Si tu veux juste cacher la fenêtre, tu peux aussi utiliser Form1.Hide, non ?
    Quel est l'objectif d'une appli console dans ton cas ? Tu veux afficher des infos dans la console ?
    Meme pas! j'utilise une application console parce que je n'ai besoin d'aucun affichage, alors j'ai besoin d'une application qui imprime un site sur une imprimante recu en param.
    j'imagine que si j'utilise une application normale, le temps d'execution sera plus lent!
    Tu savais aussi que IE est capable d'imprimer avec un simple ShellExecute ?
    comment on peut faire ca? je sais qu'on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0, 'open', 'http://www.google.fr', ...)
    mais alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0, 'print', 'http://www.google.fr', ...)
    je n'en suis pa sur!!
    Par contre, je n'ai jamais réussi à imprimer et que IE caché. Apparemment, il faut que la page soit affichée pour être imprimée...
    si, c'est possible, j'ai reussi depuis mon dernier message mais tres difficilement. avec ce code ca marche tres bien quand j'execute pas à pas. mais quand je lance l'executable directement il me donne l'erreur: "dialogarguments.__ie_printtype a la valeur null ou n'est pas un objet"
    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
     
    try
        objIE := CreateOLEObject('InternetExplorer.Application');
     
        objIE.application.Visible := False;
        objIE.application.Navigate(site);
     
        while (objIE.ReadyState <> 4) or objIE.Busy do
          sleep(200);
     
        objIE.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
     
        while objIE.Busy do
          sleep(200);
      finally
        objIE.Quit;
        objIE := Unassigned;
        CoUninitialize;
      end;
    t'as une idée de comment éviter d'avoir ce problème?

  5. #5
    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
    Par défaut
    Essaye d'ajouter un sleep à 2 ou 3 secondes entre chaque opération de ton code. Si ça fonctionne, essaye de voir ceux que tu peux enlèver sans que ça ne fonctionne plus.
    Ou bien peut-être d'abord essayer avec Application.ProcessMessages plutôt que des sleep...

    [EDIT]
    j'imagine que si j'utilise une application normale, le temps d'execution sera plus lent!
    Faux ! Ou alors de très peu...
    De retour parmis vous après 10 ans!!

  6. #6
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while objIE.Busy do
          sleep(200);
    par :
    et ca fonctionne très bien!!
    tant qu'à faire, j'ai remplacé les sleep par Application.ProcessMessages, car je n'aimais pas non plus les sleep

    merci bcp Sub0

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

Discussions similaires

  1. Probleme de navigation avec webbrowser goback
    Par blairswish dans le forum C#
    Réponses: 0
    Dernier message: 13/08/2009, 15h24
  2. Réponses: 3
    Dernier message: 31/12/2008, 12h27
  3. probleme avec webbrowser
    Par fine_man_vb dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 16/01/2008, 13h38
  4. Probleme avec WebBrowser
    Par Jean-Pierre49 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/11/2007, 12h22
  5. probleme avec la creation dynamique d'un WebBrowser
    Par Jayceblaster dans le forum Delphi
    Réponses: 2
    Dernier message: 30/07/2006, 23h44

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