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

API, COM et SDKs Delphi Discussion :

Besoin d'aide avec pilotage de IExplore.exe en Delphi 6 PE


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 294
    Points : 171
    Points
    171
    Billets dans le blog
    1
    Par défaut Besoin d'aide avec pilotage de IExplore.exe en Delphi 6 PE
    J'ai besoin d'aide avec le pilotage de IExplore.exe, en Delphi 6 PE.

    J'ai bien un composant TWebBrowser, mais il doit être trop vieux et n'est pas capable d'afficher toutes les pages qui m'intéressent, en particulier les pages OpenLayers (cartes géographiques et routières).

    J'ai donc essayé de lancer InternetExplorer (IExplore.exe). Là, je peux afficher correctement ces pages. Maintenant, je veux attacher IExplore.exe à un TPanel dans mon application. Cela marche également parfaitement. Mais il affiche évidemment la fenêtre complète, avec la barre de titre, URL etc. Je suis donc passé en mode kiosque en ajoutant "-k" à ma ligne de commande de lancement. Succès: seule l'image apparaît et remplit tout le TPanel. Et je veux naviguer dans cette page et manipuler l'image, exactement comme si le browser était "indépendant".

    Tout cela est très bien. Mais j'ai deux problèmes:

    1. lors du lancement, une page blanche couvrant totalement l'écran s'ouvre brièvement, avant de disparaître. Ce comportement, bien que pas bloquant, est gênant visuellement. Je lance IExplore.exe de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'open',PChar(ProgramName),PChar('-k '+url),nil,SW_HIDE);
    Le style SW_HIDE est bien pris en compte, mais après l'apparition de la fenêtre blanche seulement ! Est-ce qu'on peut faire mieux ? Juste pour info: après le lancement du browser, je trouve son handle de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          partialTitle := 'INTERNET EXPLORER';
        repeat begin
          hWndTemp := FindWindow(nil, nil);
          while hWndTemp <> 0 do begin
            iLenText := GetWindowText(hWndTemp, cTitletemp, 255);
            sTitleTemp := cTitletemp;
            sTitleTemp := UpperCase(copy( sTitleTemp, 1, iLenText));
            if pos(partialTitle,sTitleTemp)<>0 then Break;
            hWndTemp := GetWindow(hWndTemp, GW_HWNDNEXT);
          end;
        end until pos(partialTitle,sTitleTemp)<>0;
    La variable hWndTemp contient alors le handle de la partie visible du browser, et je l'utilise de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        windows.SetParent(hWndTemp,xhndobj);
        GetWindowRect(xhndobj,MonRect);
        with MonRect do
        SetWindowPos(hWndTemp, HWND_TOP, 0, 0, Right-Left, Bottom-Top,  SW_SHOWNORMAL );
    pour faire apparaître le browser dans mon TPanel dont le handle est dans xhndobj. Ensuite, je m'assure des bonnes dimensions et le rends visible.

    2. je n'ai trouvé aucun moyen de navuguer vers une autre URL, par programme. Je peux le faire avec in IExplore.exe qui n'est pas en mode kiosque - là, je sais envoyer une URL et ça marche bien. Mais en mode kiosque, je n'ai plus le handle qui me permet d'envoyer l'URL, ayant seulement le handle de la partie visible en mode kiosque, ce qui me permet de le supprimer, d'ailleurs. Donc, pour le moment, le seul moyen de naviquer vers une autre URL est de supprimer le browser et d'en relancer un en mode kiosque avec la nouvelle URL. C'est très lourd et visuellement gêenant - voir problème (1).

    Ca serait super si quelqu'un avait une idée concernant l'un ou l'autre de ces deux points. Merci d'avance.

  2. #2
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 294
    Points : 171
    Points
    171
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé !

    En fait, je passe par l'automatisation par OLE-objet, de la manière suivante:
    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
     
    ...
    var
      ie: variant;
      hie: HWND;
    begin
      ie := CreateOleObject('InternetExplorer.Application');
      ie.TheaterMode := True;
      ie.Visible := True;
      ie.Navigate(url^);
      hie := ie.hwnd;
      SetForegroundWindow(hie);
     
      windows.SetParent(hie,hdest);
      GetWindowRect(hdest,MonRect);
      with MonRect do
          SetWindowPos(hie, HWND_TOP, 0, 0, Right-Left, Bottom-Top,  SW_SHOWNORMAL );
    ...
    end;
    hdest représente le handle d'un TPanel dans lequel je veux voir apparaître le browser. Et avec le code ci-dessus, il est bien en mode kiosque, s'affiche dans le panel, ne fait pas apparaître l'écran blanc au démarrage et je peux changer de page en utilisant "ie.Navigate(url^);" à volonté.

    Donc, problème résolu.

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

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  3. Besoin d'aide avec TinyXML
    Par Clad3 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 15/08/2005, 18h20
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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