«« Site Rescued »»

While the site is still going to move from its current host, a new site will now take its place. More Info.

The new site may have less content, but the core will now remain. And it will now play nicely with phones! Keep an eye on the DelphiDabbler Blog for news.

How to customise the TWebBrowser user interface (part 6 of 6)

Demo code, summary, references and feedback.

Demo Code

Demo code to accompany this article is available for download (see below). The demo includes the following:

  • Two applications – WBUIArtDemo1.exe and WBUIArtDemo2.exe – that include Delphi code for stages 1 and 2 of the sample application.
  • Separate units containing the nul and custom container classes – UNulContainer.pas and UContainer.pas.
  • IntfDocHostUIHandler.pas that contains the declaration of IDocHostUIHandler, associated structures and all the DOCHOSTUIFLAG_ flags.

This code has been tested with Delphi 7, 2006 and 2010 on Windows XP Pro and Internet Explorer 6 and on Windows Vista Home Premium with Internet Explorer 8.

This source code is merely a proof of concept and is intended only to illustrate this article. It is not designed for use in its current form in finished applications. The code is provided on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
The code is open source. IntfDocHostUIHandler.pas is licensed under the MPL / GPL / LGPL tri-license and other code can be re-used as required. See the source files for full details. If you agree to all this then please download the code using the following link.


In this article we have investigated how to customize the appearance of a TWebBrowser control.

We noted that we can control the appearance and behaviour of TWebBrowser by developing a container object that implements the IDocHostUIHandler interface. In order for the browser control to find the IDocHostUIHandler implementation we also needed to implement IOleClientSite.

We first created a reusable, "do nothing" container class that provided a minimal implementation of the required interfaces. Then we derived a custom class from the "do nothing" container that provided the required customization. We also exposed properties to enable users to manipulate the browser's appearance and behaviour. Finally we developed a sample application to exercise the customizable container.

A downloadable demo program was made available that includes all the code discussed in the article.


Several references from MSDN were used in researching this article. They are:


I hope you enjoyed this article and found it useful. If you have any observations, comments or have found any errors please contact me.