Bonjour à tous.
J'ai créer un navigateur par onglet. J'utilise donc un pagecontrol, un TTabsheet et un webbrowser, le tout créer dynamiquement. J'ai inserer sur la fiche un Tapplicationevent afin que la touche "entrée" soit valide dans le TWebbrowser, ainsi que le code suivant :
private
{ Déclarations privées }
public
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
if (WebBrowser1 = nil) then begin
Handled := False; Exit;
end;
Handled := (IsDialogMessage(WebBrowser1.Handle, Msg) = True);
if (Handled) and (not WebBrowser1.Busy) then begin
if FOleInPlaceActiveObject = nil then begin
Dispatch := WebBrowser1.Application;
if Dispatch <> nil then begin
Dispatch.QueryInterface (IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <> nil then
FOleInPlaceActiveObject := iOIPAO;
end;
end;
if FOleInPlaceActiveObject <> nil then
if not (((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)))
then FOleInPlaceActiveObject.TranslateAccelerator (Msg);
end;
end;
Cela fonctionne très bien dans un Webbrowser simple. Le probleme est que dans les Webbrowser dynamique, cela fonctionne, mais lorsque je ferme un onglet, l'application bloque, et un message d'erreur surviens, du genre "Project1.exe à provoquer une erreur d'exception à l'adresse 00x00000 etc..."
J'ai chercher, en vain, la possibilité de pouvoir activer la touche "entrée" dans chaque Webbrowser crée ! Serait il possible d'employer un autre code, un autre composant que TApplicationEvent, ou alors changer un bout de code dans celui-ci ? A savoir que dans l'exemple cité plus haut, j'ai remplacé tous les "Webbrowser1" par "Browser" qui est la désignation des TWebbrowser créer dynamiquement ( Browser := TWebbrowser.create).
Merci pour les contributions...