Delphi 3 & WebBrowser (C to Delphi)

How to translate this from C++ to Delphi 3?

       LPDISPATCH lpDispatch = NULL;
       LPOLECOMMANDTARGET lpOleCommandTarget = NULL;

       lpDispatch = m_ctlWebBrowser.GetDocument();
       ASSERT(lpDispatch);

       lpDispatch->QueryInterface(IID_IOleCommandTarget,
                                  (void**)&lpOleCommandTarget);
       ASSERT(lpOleCommandTarget);

       lpDispatch->Release();

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

       lpOleCommandTarget->Release();

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).
LVL 2
kolarbAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

kolarbAuthor Commented:
Adjusted points to 300
0
kolarbAuthor Commented:
Edited text of question
0
kolarbAuthor Commented:
Adjusted points to 600
0
Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

gysbert1Commented:
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
0
sperlingCommented:
WB is of type TWebBrowser.

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


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.

Regards,

Erik.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
kolarbAuthor Commented:
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 ?
0
sperlingCommented:
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.

Regards,

Erik.
0
kolarbAuthor Commented:
I originally wanted to append this to the question too, but your answer came very quickly. :)
0
sperlingCommented:
What events don't work?

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

Regards,

Erik.


0
kolarbAuthor Commented:
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 :)
0
sperlingCommented:
No rush ;)

You getting things to work?

Regards,

Erik.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.