Home > Back-end >  Disable keyboard on TWebBrowser in Delphi
Disable keyboard on TWebBrowser in Delphi

Time:05-26

I want Disable Keyboard for TWebBrowser and avoid copying information inside it using Ctrl C. but I couldn't find any option for disable keyboard in TWebBrowser properties.

Is there a way to do this?

EDIT: I saw this solution but it doesn't work. Disable All Keypresses

CodePudding user response:

You can do that at the application level, preventing some messages to be forwarded to the TWebBrowser component. For example by using a TApplicationEvents component and its OnMessage event handler:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (
    //keyboard
    (Msg.message = WM_KEYDOWN)
    //right click, for avoid copy-paste from popupmenu
    (Msg.Message = WM_RBUTTONDOWN) or
    (Msg.Message = WM_RBUTTONDBLCLK) or
  ) then
  begin
    if IsChild(WebBrowser1.Handle, Msg.hwnd) then
    begin
      Handled := True;
    end;
  end;
end;

A cleaner solution could be to suppress such messages at the component level, but unforntunately I've never found a way to make that works with the TWebBrowser component

CodePudding user response:

@Fabrizio

Thank you for your code. this code can not Disable Keyboard for TWebBrowser. For this problem I found a component called EmbeddedWB. It have options for disable context menu.

Now Compound Options with your code (with a little change) makes text copying completely disabled.

procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if ((Msg.message=WM_RBUTTONDOWN) or (Msg.message=WM_RBUTTONUP) or 
    (Msg.message=WM_KEYDOWN) or (Msg.message=WM_KEYUP)) and 
    IsChild(WebBrowser.Handle,Msg.hwnd) then
    begin
     PopupMenu.Popup(Msg.pt.X,Msg.pt.Y);
     Handled:=true;
 end;

end;

  • Related