Delphi a WebBrowser - Jak zakázat kontextové menu

3. 8. 2013, Vladimír Klaus, přečteno 2935x

Delphi
Internet

Komponenta WB se docela často používá pro zobrazení různých informací nebo HTML textů, ale není vůbec pěkné, když na okno může uživatel kliknout pravým tlačítkem a uvidí kontextové menu známé z IE.

Delphi a WebBrowser, díl 1

Toto menu se nejlépe zakazuje přímo v HTML stránce, nastavením „oncontextmenu“.

<body oncontextmenu="return false">

Podobně můžete zakázat i další akce, jak ukazuje následující příklad. To se hodí, pokud je okno čistě informační a nechcete, aby se uživatel pokoušel s ním něco dělat. Dá se tak v podstatě zcela skrýt, že jde o WB okno a HTML obsah.

<body oncontextmenu="return false" onmousedown="return false" onselectstart="return false" ondragstart="return false">

Ale co dělat, když to jsou cizí stránky nebo zkrátka nemůžeme ovlivnit, co bude zapsáno v HTML? Pak na formulář přidáme komponentu TApplicationEvents a naplníme událost OnMessage takto.

procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  if (Msg.message=WM_RBUTTONDOWN) and IsChild(WebBrowser1.Handle, Msg.hwnd) then begin
    Handled:=true;
  end;
end;

Čeho se tím docílí? Pokud kliknu pravým tlačítkem nad WB, pak nastavím, že je událost obsloužena a dál ji nepustím. K WB se tedy požadavek na zobrazení kontextového menu nedostane.

Malá aplikace ukazující práci s WB je zdarma ke stažení.