Webbrowser1newwindow2 - ouverture de la nouvelle fenêtre dans notre appli

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 999 fois - Téléchargée 30 fois

Contenu du snippet

Plus d'ouverture d'IE. Ouverture multiple de son appli, apparaissant à chaque fois dans la barre des taches, donc plus de fermeture de toutes les "fenêtres" si on ferme la première.

Après une recherche fébrile sur tous les sites in the www, je n'avais pas trouvé de réponse satisfaisante au problème évoqué plus haut.

J'ai donc retroussé les manches, et je tiens enfin la solution. Si vous la trouvez ailleurs, signalez-le moi, j'attaque le Prozac aussitôt ;)

Autant dire que c'est une exclusivité DelphiFr.com...

Merci à leobaillard et à mike255 qui m'ont stimulé à travers les questions-réponses échangées sur ce forum.

Vous remarquerez l'utilisation de l'évènement "TWebBrowser.OnStatusTextChange".

Je vous cite l'aide en ligne de Delphi :

"N'utilisez pas cet événement. Il est inclus dans l'interface TWebBrowser car l'interface IWebBrowser2 est partagée avec Internet Explorer. OnStatusTextChange se produit quand le texte affiché dans la barre d'état d'Internet Explorer change."

Comprenne qui pourra...

Vous noterez au passage que vous disposez ainsi des informations qui s'affichent normalement dans la Barre d'état d'Internet Explorer (URL pointées par la souris, entre autres...)


Mise à jour du code :

Suite à une observation pertinente de DelphiCool, me faisant remarquer que le code ne fonctionnait pas dans le cas d'un clic droit pour ouvrir une nouvelle fenêtre (je ne comprends pas comment ça m'avait échappé, mais c'est vrai que ce n'était pas le but initial...), j'ai modifié la procedure "WebBrowser1StatusTextChange()".

J'y vérifie maintenant que "Text" est une url valide.

Source / Exemple :


var STUrl: String;      // l'URL pointée par la souris
    PathAppli: String;  // répertoire de l'appli
    NameAppli: String;  // nom de l'appli

procedure TForm1.FormCreate(Sender: TObject);
var Param: String;
begin
  Param := ParamStr(1); // URL éventuellement passée en paramètre  
  if Param = EmptyStr then  // si pas de paramètre...
    WebBrowser1.GoHome      // page d'accueil
  else                      // si URL en paramètre...
  begin    
    WebBrowser1.Navigate(
    Param,    // adresse URL
    EmptyParam,
    EmptyParam,
    EmptyParam,
    EmptyParam);
  end;
  PathAppli := ExtractFilePath(Application.ExeName);
  NameAppli := ExtractFileName(Application.ExeName);
end;

procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
  const Text: WideString);
var IsUrl: Boolean;
begin
  IsUrl := (Pos('http://', Text) = 1);  // contrôle que Text = URL valide
  StatusBar1.Panels[2].Text := Text;    // affichage de Text
  if IsUrl then                         // si Text = URL valide...
    STUrl := Text;                      // on récupère cette URL
end;

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  Cancel := True; // annule l'ouverture dans IE
  ShellExecute(   // ouverture dans nouvelle instance de notre appli !
  Handle,
  'Open',
  PChar(PathAppli + '\' + NameAppli),
  PChar(STUrl) ,  // url transmise en paramètre
  '',
  SW_SHOWNORMAL);
end;

Conclusion :


J'avais laissé en standby le "développement" d'un Navigateur utilisant WebBrowser. Je pense que je vais le reprendre afin de partager avec vous quelques astuces.

A voir également

Ajouter un commentaire

Commentaires

pkzip
Messages postés
19
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
25 juillet 2006
-
J'ai trouvé quelquechose qui devrait dépanner pas mal de monde.
Et je peux vous dire que ça a pas été simple du tout...
Je vous le mêts en code Source
japee
Messages postés
1711
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
19 novembre 2019
1 -
Pfff... si on clique sur une animation flash, problème aussi, forcément...
Ca va être dur, dur... :(
japee
Messages postés
1711
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
19 novembre 2019
1 -
Exact, Alldonkey, il va falloir affiner la technique.
Les javascript ne sont pas pris en charge non plus, dirait-on.
Le problème étant que je ne suis pas un pro des langages internet en général, va peut-être falloir m'aider, les gars...
Je vais creuser tout ça.
En remaniant le code dans l'évènement "WebBrowser1NewWindow2", on doit pouvoir déjà arranger le problème que tu évoques...
Je m'y mets dès ce soir.
A +
Alldonkey
Messages postés
9
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
23 juillet 2004
-
salut il y a encore un probleme, aller par exemple sur www.tiscali.fr, et cliquer sur Téléphone gratuit * ! comme l'adresse ressemble a http://www.tiscali.fr/# ba le nevigateur le prend pas en compte sa ouvre seulement tiscali de nouveau ! Merci kan meme mé si tu peut resourdre se probleme sa seré cool !!
DelphiCool
Messages postés
455
Date d'inscription
mardi 24 juillet 2001
Statut
Modérateur
Dernière intervention
10 mars 2009
-
nickel ;D

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.