Domanda

Ho un TWebBrowser collocato su un modulo con il designMode abilitato.
Urlare il browser ho un pulsante di chiusura con il set Caption 'Clos & e'.
Quando sto modificando i contenuti di un documento all'interno del browser web e premo il tasto E il pulsante di chiusura è chiamato.
Sembra che si sta trattando TWebBrowser come gli altri controlli che non gestiscono le chiavi e / o non accettano caratteri (ad esempio TButton).

Come posso risolvere questo problema?

Grazie in anticipo.

È stato utile?

Soluzione

scendono dal TWebBrowser, eseguire l'override del gestore di messaggi CN_CHAR e 0 ritorno. Attivazione del collegamento con Alt+E continuerà a funzionare.

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;

Altri suggerimenti

In vostra unità, dichiarare

var
  WebBrowserHandle: HWND;

e

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

Nella sezione implementazione, scrittura

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;

Ora aggiungere un componente TApplicationEvents, e utilizzare l'evento OnShortCut:

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top