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.
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.