• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 517
  • Last Modified:

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).
0
kolarb
Asked:
kolarb
  • 6
  • 4
1 Solution
 
kolarbAuthor Commented:
Adjusted points to 300
0
 
kolarbAuthor Commented:
Edited text of question
0
 
kolarbAuthor Commented:
Adjusted points to 600
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 
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

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now