2010-04-08 13 views
1

J'ai un TWebBrowser placé sur un formulaire avec le designMode activé.
Ci-dessous le navigateur J'ai un bouton de fermeture avec la légende définie sur 'Clos & e'.
Lorsque j'édite le contenu d'un document dans WebBrowser et que j'appuie sur la touche E, le bouton de fermeture est appelé.
Il semble qu'il traite TWebBrowser comme d'autres contrôles qui ne gèrent pas les clés et/ou n'acceptent pas les caractères (par exemple, TButton).Comment rendre TWebBrowser ignorer les caractères accélérateurs des autres contrôles?

Comment puis-je résoudre ce problème?

Merci d'avance.

Répondre

4

Descend de TWebBrowser, remplace le gestionnaire de messages CN_CHAR et renvoie 0. Déclencher le raccourci avec Alt+E fonctionnera toujours.

type 
    TWebBrowser = class(SHDocVw.TWebBrowser) 
    procedure CNChar(var Message: TWMChar); message CN_CHAR; 
    end; 

... 

procedure TWebBrowser.CNChar(var Message: TWMChar); 
begin 
    Message.Result := 0; 
end; 
+2

Il a travaillé, mais je devais changer le MessageResult de 1 à 0. TKS –

+0

Oui, si vous avez résultat: = 1 puis en tapant ne fonctionne pas. Si vous changez le résultat: = 0 cela fonctionne .. –

0

Dans votre unité, déclarer

var 
    WebBrowserHandle: HWND; 

et

function EnumChildProc(h: HWND; p: LPARAM): boolean; stdcall; 

Dans la section de mise en œuvre, écrire

function EnumChildProc(h: HWND; p: LPARAM): boolean; stdcall; 
var 
    TestClassName: array[0..31] of AnsiChar; 
begin 
    GetClassNameA(h, @TestClassName, 32); 
    result := not SameStr(TestClassName, 'Internet Explorer_Server'); 
    if not result then 
    WebBrowserHandle := h; 
end; 

Maintenant, ajoutez un composant TApplicationEvents et utilisez le OnShortCut événement:

procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; 
    var Handled: Boolean); 
var 
    h: HWND; 
begin 
    WebBrowserHandle := 0; 
    h := FindWindowEx(Handle, 0, 'Shell Embedding', nil); 
    EnumChildWindows(h, @EnumChildProc, 0); 
    if WebBrowserHandle = GetFocus then 
    Handled := true; 
end;