We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now


Delphi 3 & WebBrowser (C to Delphi)

kolarb asked
Medium Priority
Last Modified: 2010-04-06
How to translate this from C++ to Delphi 3?

       LPDISPATCH lpDispatch = NULL;
       LPOLECOMMANDTARGET lpOleCommandTarget = NULL;

       lpDispatch = m_ctlWebBrowser.GetDocument();



       // print contents of web browser control
       lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL,NULL);


the answer is somewhere in ActiveX.pas

If I translate this into Delphi it doesn't work. I am using the Internet Explorer 3.02 WebBrowser ActiveX control.

webbrowser.document.queryinterfacce(OleCommandTarget, OCT);
OCT.Exec(GUID_NULL, OLEID_PRINT, 0, variant, variant);

The error it returns is unidentifiable. (BTW the above is as I remeber it - didn't check the syntax).
Watch Question


Adjusted points to 300


Edited text of question


Adjusted points to 600

If you can contact me via E-Mail and send me the info I need I will have a look if I can do this for you ...

I do not have a copy of the activeX control or any info thereof. You say this works fine in C++ ? Since I have translated many programs in the past I should be able to do this.

If you could mail me the Info you have gathered thusfar and the control, as well as a small compilable sample app in c++ (I assume you are not using visual c but straigt c++) I will give it a go ...

My adress is prefect@iafrica.com
WB is of type TWebBrowser.

procedure TForm1.Button1Click(Sender: TObject);
  pg      : PGUID;
  Dummy   : OleVariant;
  RetVal  : INTEGER;
  pg := nil;
  RetVal :=
  (WB.ControlInterface.Document as IOLECommandTarget).Exec
    ( pg^, OLECMDID_PRINT, 0, Dummy, Dummy);

The trick is how to pass a nil pointer to Exec.

I do believe this is what you needed, if not, let me know. I'm sorry it took so long.



Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts


Thanks Eric, this worked fine and I noticed what a little change it needed from my program. I never tried to actually send a nil pointer instead of a GUID_NULL.

But I still need help regarding this topic. Delphi is not firing any events with the WebBrowser app. For Delphi2 there was a patch available from Borland - of course since all of the main units were rewriten this patch is not applicable anymore. I need to fire this Print command from an WebBrowser event.

So I am asking you to help me enable events on the browser.

I am appending comment from Peter Maude from the activeX newsgroup on Borland.com.

> When I looked at the Wrapper file for the OCX shDocVw.pas it appeared
> that Delphi had set the DWebBroweser events as the event Interface. In
> the initConrolData method the DWebBrowserEvents is specified as the
> EventIID.  When you look at the Base Implementation of TActiveXControl
> you can see that a connection Point is created for the EventIID.

> Here is the problem. DWebBrowser is a Dual Interface, is the Internet
> Explorer firing the events down what it assumes should be an implemented
> interface as opposed to the Invoke method on the base IDispatch.

> Borland only implement the Invoke type handlers and not the full dual
> implementation. BUT they create a Connection point for the Full
> implementation. Therefore when the Internet explorer tries to connect an
> outgoing interfaces it will think it can send events down the more
> optimised dual implementation, which in reality is only a IDispatch
> handler ?

Well, for the amount of points you're offering I'll gladly attempt to resolve this Q too... I'll fiddle around with the generated classes for the webbrowser, and let you know when I've found a solution.




I originally wanted to append this to the question too, but your answer came very quickly. :)

What events don't work?

I've tried OnProgressChange and OnNavigateComplete, and they both works as intended...




Hi -- sperling. Looks like my beta version of Delphi3 was to blame for webbrowser not working properly.

PS: please wait a little bit more, and I will give you 2400 quality points :)

No rush ;)

You getting things to work?


Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.